From 7eda716c55d2247a79519a9f0a0950878eca6bf2 Mon Sep 17 00:00:00 2001
From: wujing <wujing50@huawei.com>
Date: Thu, 16 Jun 2022 19:53:11 +0800
Subject: [PATCH 27/30] use util_smart_calloc_t to prevent overflow

Signed-off-by: wujing <wujing50@huawei.com>
---
 .../connect/grpc/grpc_containers_client.cc    |  6 +-
 src/client/connect/grpc/grpc_images_client.cc |  2 +-
 .../connect/grpc/grpc_volumes_client.cc       |  2 +-
 src/client/connect/protocol_type.c            |  4 +-
 .../connect/rest/rest_containers_client.c     | 39 ++++--------
 src/client/connect/rest/rest_images_client.c  | 19 +++---
 src/cmd/isula/base/create.c                   |  9 +--
 src/cmd/isula/information/inspect.c           |  6 +-
 src/cmd/isula/isula_container_spec.c          | 15 +----
 src/cmd/isula/isula_host_spec.c               | 30 ++--------
 src/cmd/isula/stream/exec.c                   |  2 +-
 src/cmd/isulad/isulad_commands.c              |  5 +-
 src/daemon/common/events_format.c             |  2 +-
 src/daemon/config/daemon_arguments.c          |  8 +--
 src/daemon/config/isulad_config.c             | 11 ++--
 .../grpc/grpc_containers_service_private.cc   | 31 ++--------
 .../entry/connect/grpc/grpc_images_service.cc |  9 +--
 src/daemon/entry/cri/checkpoint_handler.cc    |  6 +-
 src/daemon/entry/cri/cri_helpers.cc           | 32 +++-------
 src/daemon/entry/cri/cri_security_context.cc  | 12 +---
 .../entry/cri/websocket/service/exec_serve.cc |  8 +--
 .../executor/container_cb/execution_create.c  | 12 +---
 .../executor/container_cb/execution_extend.c  |  6 +-
 .../container_cb/execution_information.c      | 23 ++------
 src/daemon/executor/container_cb/list.c       |  9 +--
 src/daemon/executor/image_cb/image_cb.c       | 12 +---
 .../modules/container/container_state.c       |  7 +--
 src/daemon/modules/container/container_unix.c |  7 +--
 .../modules/container/containers_store.c      |  6 +-
 .../container/health_check/health_check.c     | 17 +++---
 .../modules/image/embedded/embedded_image.c   |  8 +--
 .../modules/image/oci/oci_config_merge.c      | 15 +----
 src/daemon/modules/image/oci/oci_load.c       | 10 ++--
 src/daemon/modules/image/oci/registry/auths.c |  2 +-
 .../modules/image/oci/registry/registry.c     | 37 ++++++------
 .../oci/storage/image_store/image_store.c     |  6 +-
 src/daemon/modules/image/oci/utils_images.c   |  4 +-
 src/daemon/modules/plugin/plugin.c            |  7 +--
 .../modules/runtime/engines/lcr/lcr_rt_ops.c  |  2 +-
 .../modules/service/inspect_container.c       | 20 +------
 src/daemon/modules/service/io_handler.c       | 35 ++++++-----
 .../modules/service/service_container.c       |  2 +-
 src/daemon/modules/spec/parse_volume.c        |  6 +-
 src/daemon/modules/spec/specs.c               |  6 +-
 src/daemon/modules/spec/specs_mount.c         | 15 ++---
 src/daemon/modules/spec/specs_security.c      | 59 ++++++-------------
 src/daemon/modules/spec/verify.c              | 10 +---
 src/daemon/modules/volume/local.c             | 17 +++---
 src/daemon/modules/volume/volume.c            |  4 +-
 src/utils/console/console.c                   |  7 +--
 src/utils/cutils/utils_array.c                | 16 ++---
 src/utils/cutils/utils_string.c               | 14 +----
 .../oci_config_merge/oci_config_merge_ut.cc   |  2 -
 53 files changed, 198 insertions(+), 463 deletions(-)

diff --git a/src/client/connect/grpc/grpc_containers_client.cc b/src/client/connect/grpc/grpc_containers_client.cc
index ebe71df9..85cafe9b 100644
--- a/src/client/connect/grpc/grpc_containers_client.cc
+++ b/src/client/connect/grpc/grpc_containers_client.cc
@@ -495,7 +495,7 @@ public:
             ERROR("Too many summary info!");
             return -1;
         }
-        response->processes = static_cast<char **>(util_common_calloc_s(num * sizeof(char *)));
+        response->processes = static_cast<char **>(util_smart_calloc_s(sizeof(char *), num));
         if (response->processes == nullptr) {
             ERROR("out of memory");
             response->cc = ISULAD_ERR_MEMOUT;
@@ -1666,8 +1666,8 @@ public:
     {
         int size = gresponse->containers_size();
         if (size > 0) {
-            response->container_stats = static_cast<isula_container_info *>(
-                                            util_common_calloc_s(size * sizeof(struct isula_container_info)));
+            response->container_stats =
+                static_cast<isula_container_info *>(util_smart_calloc_s(sizeof(struct isula_container_info), size));
             if (response->container_stats == nullptr) {
                 ERROR("Out of memory");
                 return -1;
diff --git a/src/client/connect/grpc/grpc_images_client.cc b/src/client/connect/grpc/grpc_images_client.cc
index 50265e04..9424a90a 100644
--- a/src/client/connect/grpc/grpc_images_client.cc
+++ b/src/client/connect/grpc/grpc_images_client.cc
@@ -71,7 +71,7 @@ public:
             response->cc = ISULAD_ERR_MEMOUT;
             return -1;
         }
-        images_list = (struct isula_image_info *)util_common_calloc_s(sizeof(struct isula_image_info) * (size_t)num);
+        images_list = (struct isula_image_info *)util_smart_calloc_s(sizeof(struct isula_image_info), (size_t)num);
         if (images_list == nullptr) {
             ERROR("out of memory");
             response->cc = ISULAD_ERR_MEMOUT;
diff --git a/src/client/connect/grpc/grpc_volumes_client.cc b/src/client/connect/grpc/grpc_volumes_client.cc
index 902e8a13..32b83a9e 100644
--- a/src/client/connect/grpc/grpc_volumes_client.cc
+++ b/src/client/connect/grpc/grpc_volumes_client.cc
@@ -156,7 +156,7 @@ public:
     {
         auto size = gresponse->volumes_size();
         if (size != 0) {
-            response->volumes = static_cast<char **>(util_common_calloc_s(sizeof(char *) * size));
+            response->volumes = static_cast<char **>(util_smart_calloc_s(sizeof(char *), size));
             if (response->volumes == nullptr) {
                 return -1;
             }
diff --git a/src/client/connect/protocol_type.c b/src/client/connect/protocol_type.c
index af582abf..713c69cb 100644
--- a/src/client/connect/protocol_type.c
+++ b/src/client/connect/protocol_type.c
@@ -63,12 +63,12 @@ struct isula_filters *isula_filters_parse_args(const char **array, size_t len)
         return NULL;
     }
 
-    filters->keys = util_common_calloc_s(sizeof(char *) * len);
+    filters->keys = util_smart_calloc_s(sizeof(char *), len);
     if (filters->keys == NULL) {
         ERROR("Out of memory");
         goto cleanup;
     }
-    filters->values = util_common_calloc_s(sizeof(char *) * len);
+    filters->values = util_smart_calloc_s(sizeof(char *), len);
     if (filters->values == NULL) {
         free(filters->keys);
         filters->keys = NULL;
diff --git a/src/client/connect/rest/rest_containers_client.c b/src/client/connect/rest/rest_containers_client.c
index 04fb414d..61dcd54c 100644
--- a/src/client/connect/rest/rest_containers_client.c
+++ b/src/client/connect/rest/rest_containers_client.c
@@ -142,18 +142,13 @@ static int list_request_to_rest(const struct isula_list_request *ll_request, cha
     }
 
     len = ll_request->filters->len;
-    if (len > SIZE_MAX / sizeof(char *)) {
-        ERROR("Too many filters");
-        ret = -1;
-        goto out;
-    }
-    crequest->filters->keys = (char **)util_common_calloc_s(len * sizeof(char *));
+    crequest->filters->keys = (char **)util_smart_calloc_s(sizeof(char *), len);
     if (crequest->filters->keys == NULL) {
         ERROR("Out of memory");
         ret = -1;
         goto out;
     }
-    crequest->filters->values = (json_map_string_bool **)util_common_calloc_s(len * sizeof(json_map_string_bool *));
+    crequest->filters->values = (json_map_string_bool **)util_smart_calloc_s(sizeof(json_map_string_bool *), len);
     if (crequest->filters->values == NULL) {
         ERROR("Out of memory");
         free(crequest->filters->keys);
@@ -385,12 +380,8 @@ static int unpack_container_info_for_list_response(container_list_response *cres
     if (num == 0) {
         return 0;
     }
-    if (num > SIZE_MAX / sizeof(struct isula_container_summary_info *)) {
-        ERROR("Too many container summaries");
-        return -1;
-    }
-    summary_info = (struct isula_container_summary_info **)util_common_calloc_s(
-                       sizeof(struct isula_container_summary_info *) * num);
+    summary_info = (struct isula_container_summary_info **)util_smart_calloc_s(
+                       sizeof(struct isula_container_summary_info *), num);
     if (summary_info == NULL) {
         ERROR("out of memory");
         return -1;
@@ -428,8 +419,8 @@ static int unpack_container_info_for_list_response(container_list_response *cres
         summary_info[i]->exit_code = cresponse->containers[i]->exit_code;
         summary_info[i]->restart_count = (unsigned int)cresponse->containers[i]->restartcount;
         summary_info[i]->created = cresponse->containers[i]->created;
-        summary_info[i]->health_state = cresponse->containers[i]->health_state ?
-                                        util_strdup_s(cresponse->containers[i]->health_state) : NULL;
+        summary_info[i]->health_state =
+            cresponse->containers[i]->health_state ? util_strdup_s(cresponse->containers[i]->health_state) : NULL;
     }
 
     return 0;
@@ -1632,12 +1623,7 @@ static int exec_request_to_rest(const struct isula_exec_request *le_request, cha
 
     int i = 0;
     if (le_request->argc > 0) {
-        if ((size_t)le_request->argc > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many arguments!");
-            ret = -1;
-            goto out;
-        }
-        crequest->argv = (char **)util_common_calloc_s(sizeof(char *) * (size_t)le_request->argc);
+        crequest->argv = (char **)util_smart_calloc_s(sizeof(char *), (size_t)le_request->argc);
         if (crequest->argv == NULL) {
             ERROR("Out of memory");
             ret = -1;
@@ -1649,12 +1635,7 @@ static int exec_request_to_rest(const struct isula_exec_request *le_request, cha
         crequest->argv_len = (size_t)le_request->argc;
     }
     if (le_request->env_len > 0) {
-        if ((size_t)le_request->env_len > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many environmental variables!");
-            ret = -1;
-            goto out;
-        }
-        crequest->env = (char **)util_common_calloc_s(sizeof(char *) * (size_t)le_request->env_len);
+        crequest->env = (char **)util_smart_calloc_s(sizeof(char *), (size_t)le_request->env_len);
         if (crequest->env == NULL) {
             ERROR("Out of memory");
             ret = -1;
@@ -1865,8 +1846,8 @@ out:
 }
 
 /* rest container info */
-static int rest_container_info(const struct isula_info_request *li_request,
-                               struct isula_info_response *li_response, void *arg)
+static int rest_container_info(const struct isula_info_request *li_request, struct isula_info_response *li_response,
+                               void *arg)
 {
     char *body = NULL;
     int ret = 0;
diff --git a/src/client/connect/rest/rest_images_client.c b/src/client/connect/rest/rest_images_client.c
index c2fc17f1..c7ab78cc 100644
--- a/src/client/connect/rest/rest_images_client.c
+++ b/src/client/connect/rest/rest_images_client.c
@@ -122,9 +122,9 @@ static int unpack_image_info_to_list_response(image_list_images_response *crespo
     }
 
     num = cresponse->images_len;
-    if (num > 0 && (num < (SIZE_MAX / sizeof(struct isula_image_info)))) {
+    if (num > 0) {
         size_t i;
-        image_info = (struct isula_image_info *)util_common_calloc_s(sizeof(struct isula_image_info) * num);
+        image_info = (struct isula_image_info *)util_smart_calloc_s(sizeof(struct isula_image_info), num);
         if (image_info == NULL) {
             ERROR("out of memory");
             return -1;
@@ -134,17 +134,19 @@ static int unpack_image_info_to_list_response(image_list_images_response *crespo
         for (i = 0; i < num; i++) {
             if (cresponse->images[i]->target != NULL) {
                 image_info[i].type = cresponse->images[i]->target->media_type ?
-                                     util_strdup_s(cresponse->images[i]->target->media_type) : util_strdup_s("-");
+                                     util_strdup_s(cresponse->images[i]->target->media_type) :
+                                     util_strdup_s("-");
                 image_info[i].digest = cresponse->images[i]->target->digest ?
-                                       util_strdup_s(cresponse->images[i]->target->digest) : util_strdup_s("-");
+                                       util_strdup_s(cresponse->images[i]->target->digest) :
+                                       util_strdup_s("-");
                 image_info[i].size = cresponse->images[i]->target->size;
             }
             if (cresponse->images[i]->created_at != NULL) {
                 image_info[i].created = cresponse->images[i]->created_at->seconds;
                 image_info[i].created_nanos = cresponse->images[i]->created_at->nanos;
             }
-            image_info[i].imageref = cresponse->images[i]->name ?
-                                     util_strdup_s(cresponse->images[i]->name) : util_strdup_s("-");
+            image_info[i].imageref = cresponse->images[i]->name ? util_strdup_s(cresponse->images[i]->name) :
+                                     util_strdup_s("-");
         }
     }
 
@@ -524,7 +526,6 @@ out:
     return ret;
 }
 
-
 /* rest image pull */
 static int rest_image_pull(const struct isula_pull_request *request, struct isula_pull_response *response, void *arg)
 {
@@ -824,7 +825,6 @@ out:
     return ret;
 }
 
-
 /* rest image tag */
 static int rest_image_tag(const struct isula_tag_request *request, struct isula_tag_response *response, void *arg)
 {
@@ -929,7 +929,6 @@ out:
 static int rest_image_import(const struct isula_import_request *request, struct isula_import_response *response,
                              void *arg)
 {
-
     client_connect_config_t *connect_config = (client_connect_config_t *)arg;
     const char *socketname = (const char *)(connect_config->socket);
     char *body = NULL;
@@ -963,7 +962,6 @@ out:
     return ret;
 }
 
-
 /* rest images client ops init */
 int rest_images_client_ops_init(isula_connect_ops *ops)
 {
@@ -983,4 +981,3 @@ int rest_images_client_ops_init(isula_connect_ops *ops)
 
     return 0;
 }
-
diff --git a/src/cmd/isula/base/create.c b/src/cmd/isula/base/create.c
index 2db2fd21..97da80ac 100644
--- a/src/cmd/isula/base/create.c
+++ b/src/cmd/isula/base/create.c
@@ -51,8 +51,7 @@
 const char g_cmd_create_desc[] = "Create a new container";
 const char g_cmd_create_usage[] = "create [OPTIONS] --external-rootfs=PATH|IMAGE [COMMAND] [ARG...]";
 
-struct client_arguments g_cmd_create_args = {
-    .runtime = "",
+struct client_arguments g_cmd_create_args = { .runtime = "",
     .restart = "no",
     .cr.oom_score_adj = 0,
     .custom_conf.health_interval = 0,
@@ -717,11 +716,7 @@ static int request_pack_host_ns_change_files(const struct client_arguments *args
         files = net_ipc_files;
         files_len = sizeof(net_ipc_files) / sizeof(net_ipc_files[0]);
     }
-    if (files_len > (SIZE_MAX / sizeof(char *)) - 1) {
-        ERROR("Too many files");
-        return -1;
-    }
-    hostconfig->ns_change_files = util_common_calloc_s((files_len + 1) * sizeof(char *));
+    hostconfig->ns_change_files = util_smart_calloc_s(sizeof(char *), (files_len + 1));
     if (hostconfig->ns_change_files == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/cmd/isula/information/inspect.c b/src/cmd/isula/information/inspect.c
index 55366551..bb52b42a 100644
--- a/src/cmd/isula/information/inspect.c
+++ b/src/cmd/isula/information/inspect.c
@@ -775,7 +775,7 @@ static char **inspect_split_filter(const char *format, size_t *filter_len)
         return res_array;
     }
 
-    res_array = (char **)util_common_calloc_s(sizeof(char *) * (*filter_len));
+    res_array = (char **)util_smart_calloc_s(sizeof(char *), (*filter_len));
     if (res_array == NULL) {
         ERROR("out of memory");
         return NULL;
@@ -847,14 +847,14 @@ static int generate_filter_string(char ***filter_string, bool **json_format, siz
     }
 
     *filter_string_len = format_size;
-    *filter_string = (char **)util_common_calloc_s(sizeof(char *) * format_size);
+    *filter_string = (char **)util_smart_calloc_s(sizeof(char *), format_size);
     if (*filter_string == NULL) {
         ERROR("out of memory");
         ret = ECOMMON;
         goto error_out;
     }
 
-    *json_format = (bool *)util_common_calloc_s(sizeof(bool) * format_size * g_cmd_inspect_args.argc);
+    *json_format = (bool *)util_smart_calloc_s(sizeof(bool), format_size * g_cmd_inspect_args.argc);
     if (*json_format == NULL) {
         ERROR("out of memory");
         ret = ECOMMON;
diff --git a/src/cmd/isula/isula_container_spec.c b/src/cmd/isula/isula_container_spec.c
index 9340708f..09406d09 100644
--- a/src/cmd/isula/isula_container_spec.c
+++ b/src/cmd/isula/isula_container_spec.c
@@ -48,12 +48,7 @@ static int pack_container_custom_config_args(container_config *container_spec,
 
     /* commands */
     if ((custom_conf->cmd_len != 0 && custom_conf->cmd)) {
-        if (custom_conf->cmd_len > SIZE_MAX / sizeof(char *)) {
-            COMMAND_ERROR("The length of cmd is too long!");
-            ret = -1;
-            goto out;
-        }
-        container_spec->cmd = util_common_calloc_s(custom_conf->cmd_len * sizeof(char *));
+        container_spec->cmd = util_smart_calloc_s(sizeof(char *), custom_conf->cmd_len);
         if (container_spec->cmd == NULL) {
             ret = -1;
             goto out;
@@ -76,11 +71,7 @@ static int pack_container_custom_config_array(container_config *container_spec,
 
     /* environment variables */
     if (custom_conf->env_len != 0 && custom_conf->env) {
-        if (custom_conf->env_len > SIZE_MAX / sizeof(char *)) {
-            COMMAND_ERROR("Too many environment variables");
-            return -1;
-        }
-        container_spec->env = util_common_calloc_s(custom_conf->env_len * sizeof(char *));
+        container_spec->env = util_smart_calloc_s(sizeof(char *), custom_conf->env_len);
         if (container_spec->env == NULL) {
             ret = -1;
             goto out;
@@ -202,7 +193,7 @@ static int pack_custom_with_health_check(container_config *container_spec, const
     int ret = 0;
 
     if (custom_conf->health_cmd != NULL && strlen(custom_conf->health_cmd) != 0) {
-        health_config->test = util_common_calloc_s(2 * sizeof(char *));
+        health_config->test = util_smart_calloc_s(sizeof(char *), 2);
         if (health_config->test == NULL) {
             ret = -1;
             goto out;
diff --git a/src/cmd/isula/isula_host_spec.c b/src/cmd/isula/isula_host_spec.c
index 297f9299..11e3eed3 100644
--- a/src/cmd/isula/isula_host_spec.c
+++ b/src/cmd/isula/isula_host_spec.c
@@ -401,12 +401,7 @@ static int pack_hostconfig_ulimits(host_config *dstconfig, const isula_host_conf
         goto out;
     }
 
-    if (srcconfig->ulimits_len > SIZE_MAX / sizeof(host_config_ulimits_element *)) {
-        COMMAND_ERROR("Too many ulimit elements in host config");
-        ret = -1;
-        goto out;
-    }
-    dstconfig->ulimits = util_common_calloc_s(srcconfig->ulimits_len * sizeof(host_config_ulimits_element *));
+    dstconfig->ulimits = util_smart_calloc_s(sizeof(host_config_ulimits_element *), srcconfig->ulimits_len);
     if (dstconfig->ulimits == NULL) {
         COMMAND_ERROR("Out of memory");
         ret = -1;
@@ -1127,12 +1122,7 @@ int generate_devices(host_config *dstconfig, const isula_host_config_t *srcconfi
         goto out;
     }
 
-    if (srcconfig->devices_len > SIZE_MAX / sizeof(host_config_devices_element *)) {
-        ERROR("Too many devices to be populated into container");
-        ret = -1;
-        goto out;
-    }
-    dstconfig->devices = util_common_calloc_s(sizeof(host_config_devices_element *) * srcconfig->devices_len);
+    dstconfig->devices = util_smart_calloc_s(sizeof(host_config_devices_element *), srcconfig->devices_len);
     if (dstconfig->devices == NULL) {
         ret = -1;
         goto out;
@@ -1472,13 +1462,7 @@ static int generate_mounts(host_config *dstconfig, const isula_host_config_t *sr
         goto out;
     }
 
-    if (srcconfig->mounts_len > SIZE_MAX / sizeof(char *)) {
-        COMMAND_ERROR("Too many mounts to mount!");
-        ret = -1;
-        goto out;
-    }
-
-    dstconfig->mounts = util_common_calloc_s(srcconfig->mounts_len * sizeof(mount_spec*));
+    dstconfig->mounts = util_smart_calloc_s(sizeof(mount_spec *), srcconfig->mounts_len);
     if (dstconfig->mounts == NULL) {
         ret = -1;
         goto out;
@@ -1540,13 +1524,7 @@ int generate_security(host_config *dstconfig, const isula_host_config_t *srcconf
         goto out;
     }
 
-    if (srcconfig->security_len > SIZE_MAX / sizeof(char *)) {
-        COMMAND_ERROR("Too many security opts!");
-        ret = -1;
-        goto out;
-    }
-
-    dstconfig->security_opt = util_common_calloc_s(srcconfig->security_len * sizeof(char *));
+    dstconfig->security_opt = util_smart_calloc_s(sizeof(char *), srcconfig->security_len);
     if (dstconfig->security_opt == NULL) {
         ret = -1;
         goto out;
diff --git a/src/cmd/isula/stream/exec.c b/src/cmd/isula/stream/exec.c
index df911d0b..2d0d37da 100644
--- a/src/cmd/isula/stream/exec.c
+++ b/src/cmd/isula/stream/exec.c
@@ -394,7 +394,7 @@ static char *generate_exec_suffix()
 {
     char *exec_suffix = NULL;
 
-    exec_suffix = util_common_calloc_s(sizeof(char) * (CONTAINER_ID_MAX_LEN + 1));
+    exec_suffix = util_smart_calloc_s(sizeof(char), (CONTAINER_ID_MAX_LEN + 1));
     if (exec_suffix == NULL) {
         ERROR("Out of memory");
         goto out;
diff --git a/src/cmd/isulad/isulad_commands.c b/src/cmd/isulad/isulad_commands.c
index 89d91c1b..798416a3 100644
--- a/src/cmd/isulad/isulad_commands.c
+++ b/src/cmd/isulad/isulad_commands.c
@@ -468,7 +468,7 @@ static int do_merge_conf_hosts_into_global(struct service_arguments *args)
 
     if (args->hosts_len == 0) {
         /* set default host */
-        args->hosts = (char **)util_common_calloc_s(sizeof(char *) * DEFAULT_HOSTS_LEN);
+        args->hosts = (char **)util_smart_calloc_s(sizeof(char *), DEFAULT_HOSTS_LEN);
         if (args->hosts == NULL) {
             ERROR("Out of memory");
             return -1;
@@ -544,8 +544,7 @@ static int do_merge_conf_default_ulimit_into_global(struct service_arguments *ar
         telem.name = ptr->name;
         telem.hard = ptr->hard;
         telem.soft = ptr->soft;
-        if (ulimit_array_append(&args->default_ulimit, &telem, args->default_ulimit_len) !=
-            0) {
+        if (ulimit_array_append(&args->default_ulimit, &telem, args->default_ulimit_len) != 0) {
             ERROR("merge json confs default ulimit config failed");
             return -1;
         }
diff --git a/src/daemon/common/events_format.c b/src/daemon/common/events_format.c
index 96dec401..e5ceab92 100644
--- a/src/daemon/common/events_format.c
+++ b/src/daemon/common/events_format.c
@@ -46,7 +46,7 @@ int event_copy(const struct isulad_events_format *src, struct isulad_events_form
 
     if (src->annotations_len != 0) {
         util_free_array_by_len(dest->annotations, dest->annotations_len);
-        dest->annotations = (char **)util_common_calloc_s(src->annotations_len * sizeof(char *));
+        dest->annotations = (char **)util_smart_calloc_s(sizeof(char *), src->annotations_len);
         if (dest->annotations == NULL) {
             ERROR("Out of memory");
             return -1;
diff --git a/src/daemon/config/daemon_arguments.c b/src/daemon/config/daemon_arguments.c
index c107fd74..719efef0 100644
--- a/src/daemon/config/daemon_arguments.c
+++ b/src/daemon/config/daemon_arguments.c
@@ -118,11 +118,11 @@ int service_arguments_init(struct service_arguments *args)
     if (args->json_confs->log_opts == NULL) {
         goto free_out;
     }
-    args->json_confs->log_opts->keys = (char **)util_common_calloc_s(sizeof(char *) * DEFAULT_LOG_OPTS_LEN);
+    args->json_confs->log_opts->keys = (char **)util_smart_calloc_s(sizeof(char *), DEFAULT_LOG_OPTS_LEN);
     if (args->json_confs->log_opts->keys == NULL) {
         goto free_out;
     }
-    args->json_confs->log_opts->values = (char **)util_common_calloc_s(sizeof(char *) * DEFAULT_LOG_OPTS_LEN);
+    args->json_confs->log_opts->values = (char **)util_smart_calloc_s(sizeof(char *), DEFAULT_LOG_OPTS_LEN);
     if (args->json_confs->log_opts->values == NULL) {
         goto free_out;
     }
@@ -138,8 +138,8 @@ int service_arguments_init(struct service_arguments *args)
     args->max_size = 1024 * 1024;
 
     // init container log configs
-    args->json_confs->container_log = (isulad_daemon_configs_container_log *)util_common_calloc_s(sizeof(
-                                                                                                      isulad_daemon_configs_container_log));
+    args->json_confs->container_log =
+        (isulad_daemon_configs_container_log *)util_common_calloc_s(sizeof(isulad_daemon_configs_container_log));
     if (args->json_confs->container_log == NULL) {
         ERROR("Out of memory");
         goto free_out;
diff --git a/src/daemon/config/isulad_config.c b/src/daemon/config/isulad_config.c
index 38d2a0bf..1270d0c6 100644
--- a/src/daemon/config/isulad_config.c
+++ b/src/daemon/config/isulad_config.c
@@ -323,7 +323,7 @@ char *conf_get_routine_rootdir(const char *runtime)
         ERROR("The size of path exceeds the limit");
         goto out;
     }
-    path = util_common_calloc_s(sizeof(char) * len);
+    path = util_smart_calloc_s(sizeof(char), len);
     if (path == NULL) {
         ERROR("Out of memory");
         goto out;
@@ -660,7 +660,7 @@ char *get_log_file_helper(const struct service_arguments *conf, const char *suff
         ERROR("The size of path exceeds the limit");
         return NULL;
     }
-    logfile = util_common_calloc_s(len * sizeof(char));
+    logfile = util_smart_calloc_s(sizeof(char), len);
     if (logfile == NULL) {
         ERROR("Out of memory");
         goto out;
@@ -760,7 +760,7 @@ char *conf_get_engine_log_file()
         ERROR("The size of path exceeds the limit");
         goto out;
     }
-    full_path = util_common_calloc_s(len * sizeof(char));
+    full_path = util_smart_calloc_s(sizeof(char), len);
     if (full_path == NULL) {
         FATAL("Out of Memory");
         goto out;
@@ -990,10 +990,7 @@ HOOKS_ELEM_DUP_DEF(poststop)
     int hooks_##item##_dup(oci_runtime_spec_hooks *dest, const oci_runtime_spec_hooks *src) \
     {                                                                                       \
         int i = 0;                                                                          \
-        if (src->item##_len > SIZE_MAX / sizeof(defs_hook *) - 1) {                         \
-            return -1;                                                                      \
-        }                                                                                   \
-        dest->item = util_common_calloc_s(sizeof(defs_hook *) * (src->item##_len + 1));     \
+        dest->item = util_smart_calloc_s(sizeof(defs_hook *), (src->item##_len + 1));       \
         if (dest->item == NULL)                                                             \
             return -1;                                                                      \
         dest->item##_len = src->item##_len;                                                 \
diff --git a/src/daemon/entry/connect/grpc/grpc_containers_service_private.cc b/src/daemon/entry/connect/grpc/grpc_containers_service_private.cc
index 56283c8d..e8a48d58 100644
--- a/src/daemon/entry/connect/grpc/grpc_containers_service_private.cc
+++ b/src/daemon/entry/connect/grpc/grpc_containers_service_private.cc
@@ -206,12 +206,7 @@ int ContainerServiceImpl::top_request_from_grpc(const TopRequest *grequest, cont
     }
 
     if (grequest->args_size() > 0) {
-        if ((size_t)grequest->args_size() > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many arguments!");
-            free_container_top_request(tmpreq);
-            return -1;
-        }
-        tmpreq->args = (char **)util_common_calloc_s(sizeof(char *) * grequest->args_size());
+        tmpreq->args = (char **)util_smart_calloc_s(sizeof(char *), grequest->args_size());
         if (tmpreq->args == nullptr) {
             ERROR("Out of memory");
             free_container_top_request(tmpreq);
@@ -373,12 +368,7 @@ int ContainerServiceImpl::exec_request_from_grpc(const ExecRequest *grequest, co
     }
 
     if (grequest->argv_size() > 0) {
-        if ((size_t)grequest->argv_size() > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many arguments!");
-            free_container_exec_request(tmpreq);
-            return -1;
-        }
-        tmpreq->argv = (char **)util_common_calloc_s(sizeof(char *) * grequest->argv_size());
+        tmpreq->argv = (char **)util_smart_calloc_s(sizeof(char *), grequest->argv_size());
         if (tmpreq->argv == nullptr) {
             ERROR("Out of memory");
             free_container_exec_request(tmpreq);
@@ -391,12 +381,7 @@ int ContainerServiceImpl::exec_request_from_grpc(const ExecRequest *grequest, co
     }
 
     if (grequest->env_size() > 0) {
-        if ((size_t)grequest->argv_size() > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many environmental variables!");
-            free_container_exec_request(tmpreq);
-            return -1;
-        }
-        tmpreq->env = (char **)util_common_calloc_s(sizeof(char *) * grequest->env_size());
+        tmpreq->env = (char **)util_smart_calloc_s(sizeof(char *), grequest->env_size());
         if (tmpreq->env == nullptr) {
             ERROR("Out of memory");
             free_container_exec_request(tmpreq);
@@ -490,15 +475,11 @@ int ContainerServiceImpl::list_request_from_grpc(const ListRequest *grequest, co
         *request = tmpreq;
         return 0;
     }
-    if (len > SIZE_MAX / sizeof(char *)) {
-        ERROR("invalid filters size");
-        goto cleanup;
-    }
-    tmpreq->filters->keys = (char **)util_common_calloc_s(len * sizeof(char *));
+    tmpreq->filters->keys = (char **)util_smart_calloc_s(sizeof(char *), len);
     if (tmpreq->filters->keys == nullptr) {
         goto cleanup;
     }
-    tmpreq->filters->values = (json_map_string_bool **)util_common_calloc_s(len * sizeof(json_map_string_bool *));
+    tmpreq->filters->values = (json_map_string_bool **)util_smart_calloc_s(sizeof(json_map_string_bool *), len);
     if (tmpreq->filters->values == nullptr) {
         free(tmpreq->filters->keys);
         tmpreq->filters->keys = nullptr;
@@ -744,7 +725,7 @@ int ContainerServiceImpl::stats_request_from_grpc(const StatsRequest *grequest,
     }
 
     if (grequest->containers_size() > 0) {
-        tmpreq->containers = (char **)util_common_calloc_s(grequest->containers_size() * sizeof(char *));
+        tmpreq->containers = (char **)util_smart_calloc_s(sizeof(char *), grequest->containers_size());
         if (tmpreq->containers == nullptr) {
             ERROR("Out of memory");
             free_container_stats_request(tmpreq);
diff --git a/src/daemon/entry/connect/grpc/grpc_images_service.cc b/src/daemon/entry/connect/grpc/grpc_images_service.cc
index 79c4fb7c..b1ca98b8 100644
--- a/src/daemon/entry/connect/grpc/grpc_images_service.cc
+++ b/src/daemon/entry/connect/grpc/grpc_images_service.cc
@@ -40,22 +40,17 @@ int ImagesServiceImpl::image_list_request_from_grpc(const ListImagesRequest *gre
         *request = tmpreq;
         return 0;
     }
-    if (len > SIZE_MAX / sizeof(char *)) {
-        ERROR("invalid filters size");
-        goto cleanup;
-    }
-
     tmpreq->filters = (defs_filters *)util_common_calloc_s(sizeof(defs_filters));
     if (tmpreq->filters == nullptr) {
         ERROR("Out of memory");
         goto cleanup;
     }
 
-    tmpreq->filters->keys = (char **)util_common_calloc_s(len * sizeof(char *));
+    tmpreq->filters->keys = (char **)util_smart_calloc_s(sizeof(char *), len);
     if (tmpreq->filters->keys == nullptr) {
         goto cleanup;
     }
-    tmpreq->filters->values = (json_map_string_bool **)util_common_calloc_s(len * sizeof(json_map_string_bool *));
+    tmpreq->filters->values = (json_map_string_bool **)util_smart_calloc_s(sizeof(json_map_string_bool *), len);
     if (tmpreq->filters->values == nullptr) {
         free(tmpreq->filters->keys);
         tmpreq->filters->keys = nullptr;
diff --git a/src/daemon/entry/cri/checkpoint_handler.cc b/src/daemon/entry/cri/checkpoint_handler.cc
index 858c830c..d5eab7a7 100644
--- a/src/daemon/entry/cri/checkpoint_handler.cc
+++ b/src/daemon/entry/cri/checkpoint_handler.cc
@@ -202,11 +202,7 @@ void CheckpointData::CheckpointDataToCStruct(cri_checkpoint_data **data, Errors
     }
     (*data)->host_network = m_hostNetwork;
     if (len > 0) {
-        if (len > SIZE_MAX / sizeof(cri_port_mapping *)) {
-            error.SetError("Invalid port mapping size");
-            goto out;
-        }
-        (*data)->port_mappings = (cri_port_mapping **)util_common_calloc_s(sizeof(cri_port_mapping *) * len);
+        (*data)->port_mappings = (cri_port_mapping **)util_smart_calloc_s(sizeof(cri_port_mapping *), len);
         if ((*data)->port_mappings == nullptr) {
             error.SetError("Out of memory");
             goto out;
diff --git a/src/daemon/entry/cri/cri_helpers.cc b/src/daemon/entry/cri/cri_helpers.cc
index 525d65a0..e5db52f6 100644
--- a/src/daemon/entry/cri/cri_helpers.cc
+++ b/src/daemon/entry/cri/cri_helpers.cc
@@ -77,8 +77,7 @@ auto GetDefaultSandboxImage(Errors &err) -> std::string
     const std::string defaultPodSandboxImageName { "pause" };
     const std::string defaultPodSandboxImageVersion { "3.0" };
     std::string machine;
-    struct utsname uts {
-    };
+    struct utsname uts {};
 
     if (uname(&uts) < 0) {
         err.SetError("Failed to read host arch.");
@@ -230,16 +229,12 @@ auto FiltersAdd(defs_filters *filters, const std::string &key, const std::string
     }
 
     size_t len = filters->len + 1;
-    if (len > SIZE_MAX / sizeof(char *)) {
-        ERROR("Invalid filter size");
-        return -1;
-    }
-    char **keys = (char **)util_common_calloc_s(len * sizeof(char *));
+    char **keys = (char **)util_smart_calloc_s(sizeof(char *), len);
     if (keys == nullptr) {
         ERROR("Out of memory");
         return -1;
     }
-    json_map_string_bool **vals = (json_map_string_bool **)util_common_calloc_s(len * sizeof(json_map_string_bool *));
+    json_map_string_bool **vals = (json_map_string_bool **)util_smart_calloc_s(sizeof(json_map_string_bool *), len);
     if (vals == nullptr) {
         free(keys);
         ERROR("Out of memory");
@@ -299,10 +294,7 @@ auto ContainerStatusToRuntime(Container_Status status) -> runtime::v1alpha2::Con
 auto StringVectorToCharArray(std::vector<std::string> &path) -> char **
 {
     size_t len = path.size();
-    if (len == 0 || len > (SIZE_MAX / sizeof(char *)) - 1) {
-        return nullptr;
-    }
-    char **result = (char **)util_common_calloc_s((len + 1) * sizeof(char *));
+    char **result = (char **)util_smart_calloc_s(sizeof(char *), (len + 1));
     if (result == nullptr) {
         return nullptr;
     }
@@ -487,12 +479,8 @@ void GenerateMountBindings(const google::protobuf::RepeatedPtrField<runtime::v1a
     if (mounts.empty() || hostconfig == nullptr) {
         return;
     }
-    if ((size_t)mounts.size() > INT_MAX / sizeof(char *)) {
-        err.SetError("Too many mounts");
-        return;
-    }
 
-    hostconfig->binds = (char **)util_common_calloc_s(mounts.size() * sizeof(char *));
+    hostconfig->binds = (char **)util_smart_calloc_s(sizeof(char *), mounts.size());
     if (hostconfig->binds == nullptr) {
         err.SetError("Out of memory");
         return;
@@ -737,7 +725,6 @@ out:
     free_cri_checkpoint(criCheckpoint);
 }
 
-
 auto InspectContainer(const std::string &Id, Errors &err, bool with_host_config) -> container_inspect *
 {
     container_inspect *inspect_data { nullptr };
@@ -761,8 +748,7 @@ int32_t ToInt32Timeout(int64_t timeout)
     return (int32_t)timeout;
 }
 
-void GetContainerLogPath(const std::string &containerID, char **path, char **realPath,
-                         Errors &error)
+void GetContainerLogPath(const std::string &containerID, char **path, char **realPath, Errors &error)
 {
     container_inspect *info = InspectContainer(containerID, error, false);
     if (info == nullptr || error.NotEmpty()) {
@@ -812,8 +798,8 @@ cleanup:
     free(realPath);
 }
 
-void GetContainerTimeStamps(const container_inspect *inspect, int64_t *createdAt,
-                            int64_t *startedAt, int64_t *finishedAt, Errors &err)
+void GetContainerTimeStamps(const container_inspect *inspect, int64_t *createdAt, int64_t *startedAt,
+                            int64_t *finishedAt, Errors &err)
 {
     if (inspect == nullptr) {
         err.SetError("Invalid arguments");
@@ -979,7 +965,7 @@ cleanup:
 
 char *GenerateExecSuffix()
 {
-    char *exec_suffix = (char *)util_common_calloc_s(sizeof(char) * (CONTAINER_ID_MAX_LEN + 1));
+    char *exec_suffix = (char *)util_smart_calloc_s(sizeof(char), (CONTAINER_ID_MAX_LEN + 1));
     if (exec_suffix == nullptr) {
         ERROR("Out of memory");
         return nullptr;
diff --git a/src/daemon/entry/cri/cri_security_context.cc b/src/daemon/entry/cri/cri_security_context.cc
index 466e0e1c..8484108c 100644
--- a/src/daemon/entry/cri/cri_security_context.cc
+++ b/src/daemon/entry/cri/cri_security_context.cc
@@ -41,11 +41,7 @@ static void ModifyHostConfigCapabilities(const runtime::v1alpha2::LinuxContainer
 
     const google::protobuf::RepeatedPtrField<std::string> &capAdd = sc.capabilities().add_capabilities();
     if (!capAdd.empty()) {
-        if (static_cast<size_t>(capAdd.size()) > SIZE_MAX / sizeof(char *)) {
-            error.SetError("Invalid capability add size");
-            return;
-        }
-        hostConfig->cap_add = (char **)util_common_calloc_s(sizeof(char *) * capAdd.size());
+        hostConfig->cap_add = (char **)util_smart_calloc_s(sizeof(char *), capAdd.size());
         if (hostConfig->cap_add == nullptr) {
             error.SetError("Out of memory");
             return;
@@ -57,11 +53,7 @@ static void ModifyHostConfigCapabilities(const runtime::v1alpha2::LinuxContainer
     }
     const google::protobuf::RepeatedPtrField<std::string> &capDrop = sc.capabilities().drop_capabilities();
     if (!capDrop.empty()) {
-        if (static_cast<size_t>(capDrop.size()) > SIZE_MAX / sizeof(char *)) {
-            error.SetError("Invalid capability drop size");
-            return;
-        }
-        hostConfig->cap_drop = (char **)util_common_calloc_s(sizeof(char *) * capDrop.size());
+        hostConfig->cap_drop = (char **)util_smart_calloc_s(sizeof(char *), capDrop.size());
         if (hostConfig->cap_drop == nullptr) {
             error.SetError("Out of memory");
             return;
diff --git a/src/daemon/entry/cri/websocket/service/exec_serve.cc b/src/daemon/entry/cri/websocket/service/exec_serve.cc
index 7b7d36b5..b779f25f 100644
--- a/src/daemon/entry/cri/websocket/service/exec_serve.cc
+++ b/src/daemon/entry/cri/websocket/service/exec_serve.cc
@@ -45,11 +45,7 @@ void *ExecServe::SetContainerStreamRequest(::google::protobuf::Message *request,
     }
 
     if (grequest->cmd_size() > 0) {
-        if (static_cast<size_t>(grequest->cmd_size()) > SIZE_MAX / sizeof(char *)) {
-            ERROR("Too many arguments!");
-            return nullptr;
-        }
-        m_request->argv = (char **)util_common_calloc_s(sizeof(char *) * grequest->cmd_size());
+        m_request->argv = (char **)util_smart_calloc_s(sizeof(char *), grequest->cmd_size());
         if (m_request->argv == nullptr) {
             ERROR("Out of memory!");
             return nullptr;
@@ -109,7 +105,7 @@ int ExecServe::ExecuteStreamCommand(SessionData *lwsCtx, void *request)
 
 void ExecServe::CloseConnect(SessionData *lwsCtx)
 {
-    closeWsConnect((void*)lwsCtx, nullptr);
+    closeWsConnect((void *)lwsCtx, nullptr);
 }
 
 void ExecServe::FreeRequest(void *m_request)
diff --git a/src/daemon/executor/container_cb/execution_create.c b/src/daemon/executor/container_cb/execution_create.c
index 850e0a0f..626cfbc6 100644
--- a/src/daemon/executor/container_cb/execution_create.c
+++ b/src/daemon/executor/container_cb/execution_create.c
@@ -589,7 +589,7 @@ static char *try_generate_id()
     char *id = NULL;
     char *value = NULL;
 
-    id = util_common_calloc_s(sizeof(char) * (CONTAINER_ID_MAX_LEN + 1));
+    id = util_smart_calloc_s(sizeof(char), (CONTAINER_ID_MAX_LEN + 1));
     if (id == NULL) {
         ERROR("Out of memory");
         return NULL;
@@ -675,14 +675,8 @@ static int conf_get_image_id(const char *image, char **id)
         goto out;
     }
 
-    if (strlen(ir->id) > SIZE_MAX / sizeof(char) - strlen("sha256:")) {
-        ERROR("Invalid image id");
-        ret = -1;
-        goto out;
-    }
-
     len = strlen("sha256:") + strlen(ir->id) + 1;
-    image_id = (char *)util_common_calloc_s(len * sizeof(char));
+    image_id = (char *)util_smart_calloc_s(sizeof(char), len);
     if (image_id == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -835,7 +829,7 @@ static int prepare_host_channel(const host_config_host_channel *host_channel, co
 #ifdef ENABLE_USERNS_REMAP
     char *daemon_userns_remap = conf_get_isulad_userns_remap();
     if (daemon_userns_remap != NULL) {
-        userns_remap = (const char *) daemon_userns_remap;
+        userns_remap = (const char *)daemon_userns_remap;
     }
 #endif
 
diff --git a/src/daemon/executor/container_cb/execution_extend.c b/src/daemon/executor/container_cb/execution_extend.c
index 91ce5dbb..5b131a80 100644
--- a/src/daemon/executor/container_cb/execution_extend.c
+++ b/src/daemon/executor/container_cb/execution_extend.c
@@ -341,11 +341,7 @@ error_out:
 
 static int service_stats_make_memory(container_info ***stats_arr, size_t num)
 {
-    if (num > SIZE_MAX / sizeof(container_info *)) {
-        return -1;
-    }
-
-    *stats_arr = util_common_calloc_s(num * sizeof(container_info *));
+    *stats_arr = util_smart_calloc_s(sizeof(container_info *), num);
     if (*stats_arr == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/daemon/executor/container_cb/execution_information.c b/src/daemon/executor/container_cb/execution_information.c
index 297f96b9..144daebf 100644
--- a/src/daemon/executor/container_cb/execution_information.c
+++ b/src/daemon/executor/container_cb/execution_information.c
@@ -483,12 +483,8 @@ int parse_output(char **title, char ***process, size_t *process_len, const char
 
     pid_num = get_pid_num(*title);
     stime = get_stime(*title);
-    if (util_array_len((const char **)tmp) > SIZE_MAX / sizeof(char *)) {
-        ERROR("Invalid array length");
-        ret = -1;
-        goto out;
-    }
-    *process = util_common_calloc_s(util_array_len((const char **)tmp) * sizeof(char *));
+
+    *process = util_smart_calloc_s(sizeof(char *), util_array_len((const char **)tmp));
     if (*process == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -604,15 +600,9 @@ static int get_pids(const char *name, const char *runtime, const char *rootpath,
         goto out;
     }
 
-    if (out->pids_len > SIZE_MAX / sizeof(pid_t)) {
-        ERROR("list too many pids");
-        ret = -1;
-        goto out;
-    }
-
     if (out->pids_len != 0) {
         pid_t *tmp = NULL;
-        tmp = util_common_calloc_s(sizeof(pid_t) * out->pids_len);
+        tmp = util_smart_calloc_s(sizeof(pid_t), out->pids_len);
         if (tmp == NULL) {
             ERROR("Memory out");
             ret = -1;
@@ -814,12 +804,7 @@ static int container_top_cb(container_top_request *request, container_top_respon
         cc = ISULAD_ERR_EXEC;
         goto pack_response;
     }
-    if (process_len > SIZE_MAX / sizeof(char *)) {
-        ERROR("invalid processe size");
-        cc = ISULAD_ERR_EXEC;
-        goto pack_response;
-    }
-    (*response)->processes = util_common_calloc_s(process_len * sizeof(char *));
+    (*response)->processes = util_smart_calloc_s(sizeof(char *), process_len);
     if ((*response)->processes == NULL) {
         ERROR("Out of memory");
         cc = ISULAD_ERR_EXEC;
diff --git a/src/daemon/executor/container_cb/list.c b/src/daemon/executor/container_cb/list.c
index 90f4a548..026f1efb 100644
--- a/src/daemon/executor/container_cb/list.c
+++ b/src/daemon/executor/container_cb/list.c
@@ -609,14 +609,7 @@ static int pack_list_containers(char **idsarray, const struct list_context *ctx,
     if (container_nums == 0) {
         goto out;
     }
-
-    if (container_nums > (SIZE_MAX / sizeof(container_container *))) {
-        ERROR("Get too many containers:%zu", container_nums);
-        ret = -1;
-        goto out;
-    }
-
-    response->containers = util_common_calloc_s(container_nums * sizeof(container_container *));
+    response->containers = util_smart_calloc_s(sizeof(container_container *), container_nums);
     if (response->containers == NULL) {
         ERROR("Out of memory");
         ret = -1;
diff --git a/src/daemon/executor/image_cb/image_cb.c b/src/daemon/executor/image_cb/image_cb.c
index e75cf65c..10a9661a 100644
--- a/src/daemon/executor/image_cb/image_cb.c
+++ b/src/daemon/executor/image_cb/image_cb.c
@@ -659,14 +659,7 @@ static int trans_im_list_images(const im_list_response *im_list, image_list_imag
     // If one image have several repo tags, display them all. Image with no
     // repo will also be displayed
     images_display_num = calc_images_display_num(im_list->images);
-    if (images_display_num >= (SIZE_MAX / sizeof(image_image *))) {
-        INFO("Too many images, out of memory");
-        ret = -1;
-        isulad_try_set_error_message("Get too many images info, out of memory");
-        goto out;
-    }
-
-    response->images = util_common_calloc_s(sizeof(image_image *) * images_display_num);
+    response->images = util_smart_calloc_s(sizeof(image_image *), images_display_num);
     if (response->images == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -1074,7 +1067,7 @@ static int image_pull_cb(const image_pull_image_request *request, image_pull_ima
     }
 
     EVENT("Image Event: {Object: %s, Type: Pulling}", image_ref);
-    ret = pull_request_from_rest(request,  &im_req);
+    ret = pull_request_from_rest(request, &im_req);
     if (ret != 0) {
         goto out;
     }
@@ -1101,7 +1094,6 @@ out:
     return (ret < 0) ? ECOMMON : ret;
 }
 
-
 /* image callback init */
 void image_callback_init(service_image_callback_t *cb)
 {
diff --git a/src/daemon/modules/container/container_state.c b/src/daemon/modules/container/container_state.c
index efcbe852..d342df25 100644
--- a/src/daemon/modules/container/container_state.c
+++ b/src/daemon/modules/container/container_state.c
@@ -479,12 +479,7 @@ static int container_dup_health_check_status(defs_health **dst, const defs_healt
     result->status = src->status ? util_strdup_s(src->status) : NULL;
     result->failing_streak = src->failing_streak;
     if (src->log_len != 0) {
-        if (src->log_len > SIZE_MAX / sizeof(defs_health_log_element *)) {
-            ERROR("Invalid log size");
-            ret = -1;
-            goto error;
-        }
-        result->log = util_common_calloc_s(sizeof(defs_health_log_element *) * src->log_len);
+        result->log = util_smart_calloc_s(sizeof(defs_health_log_element *), src->log_len);
         if (result->log == NULL) {
             ERROR("Out of memory");
             ret = -1;
diff --git a/src/daemon/modules/container/container_unix.c b/src/daemon/modules/container/container_unix.c
index 98f91ea9..9910b3c8 100644
--- a/src/daemon/modules/container/container_unix.c
+++ b/src/daemon/modules/container/container_unix.c
@@ -387,16 +387,11 @@ static int pack_path_and_args_from_container_spec(const container_config *contai
         v2_spec->path = util_strdup_s(container_spec->entrypoint[0]);
         total = container_spec->entrypoint_len + container_spec->cmd_len - 1;
 
-        if (total > SIZE_MAX / sizeof(char *)) {
-            ERROR("Container oci spec process args elements is too much!");
-            ret = -1;
-            goto out;
-        }
         if (total == 0) {
             goto out;
         }
 
-        v2_spec->args = util_common_calloc_s(total * sizeof(char *));
+        v2_spec->args = util_smart_calloc_s(sizeof(char *), total);
         if (v2_spec->args == NULL) {
             ERROR("Out of memory");
             ret = -1;
diff --git a/src/daemon/modules/container/containers_store.c b/src/daemon/modules/container/containers_store.c
index e0700296..e5c5b2ef 100644
--- a/src/daemon/modules/container/containers_store.c
+++ b/src/daemon/modules/container/containers_store.c
@@ -262,11 +262,7 @@ int containers_store_list(container_t ***out, size_t *size)
         ret = 0;
         goto unlock;
     }
-    if (*size > SIZE_MAX / sizeof(container_t *)) {
-        ERROR("Containers store list is too long!");
-        goto unlock;
-    }
-    conts = util_common_calloc_s(sizeof(container_t *) * (*size));
+    conts = util_smart_calloc_s(sizeof(container_t *), (*size));
     if (conts == NULL) {
         ERROR("Out of memory");
         goto unlock;
diff --git a/src/daemon/modules/container/health_check/health_check.c b/src/daemon/modules/container/health_check/health_check.c
index dc00ae33..59ec01aa 100644
--- a/src/daemon/modules/container/health_check/health_check.c
+++ b/src/daemon/modules/container/health_check/health_check.c
@@ -289,13 +289,15 @@ static char **health_check_cmds(const container_config *config)
     }
 
     shell_len = util_array_len((const char **)shell);
-    if (shell_len > (SIZE_MAX / sizeof(char *)) - config->healthcheck->test_len) {
-        ERROR("Invalid shell length");
+
+    if (config->healthcheck->test_len > SIZE_MAX - shell_len) {
+        ERROR("Invalid test comand length");
         goto out;
     }
-    cmd_slice = util_common_calloc_s((shell_len + config->healthcheck->test_len) * sizeof(char *));
+
+    cmd_slice = util_smart_calloc_s(sizeof(char *), (shell_len + config->healthcheck->test_len));
     if (cmd_slice == NULL) {
-        ERROR("out of memory");
+        ERROR("Out of memory");
         goto out;
     }
     for (i = 0; i < shell_len; i++) {
@@ -423,8 +425,7 @@ static int handle_increment_streak(container_t *cont, int retries)
         if (cont->common_config->config->healthcheck->exit_on_unhealthy) {
             pthread_t stop_container_tid = { 0 };
             char *container_id = util_strdup_s(cont->common_config->id);
-            if (pthread_create(&stop_container_tid, NULL, stop_container_on_unhealthy,
-                               (void *)container_id)) {
+            if (pthread_create(&stop_container_tid, NULL, stop_container_on_unhealthy, (void *)container_id)) {
                 free(container_id);
                 ERROR("Failed to create thread to exec health check");
                 ret = -1;
@@ -845,8 +846,8 @@ static void *health_check_monitor(void *arg)
             case MONITOR_IDLE:
             /* fall-through */
             default:
-                if (do_monitor_default(container_id, probe_interval, cont->health_check,
-                                       &start_timestamp, &last_timestamp) != 0) {
+                if (do_monitor_default(container_id, probe_interval, cont->health_check, &start_timestamp,
+                                       &last_timestamp) != 0) {
                     goto out;
                 }
                 break;
diff --git a/src/daemon/modules/image/embedded/embedded_image.c b/src/daemon/modules/image/embedded/embedded_image.c
index e6c136e0..910ba24a 100644
--- a/src/daemon/modules/image/embedded/embedded_image.c
+++ b/src/daemon/modules/image/embedded/embedded_image.c
@@ -169,13 +169,7 @@ static int embedded_images_to_imagetool_images(struct db_all_images *all_images,
         goto out;
     }
 
-    if (images_num >= (SIZE_MAX / sizeof(imagetool_image_summary *))) {
-        ERROR("Too many images, out of memory");
-        ret = -1;
-        isulad_try_set_error_message("Get too many images info, out of memory");
-        goto out;
-    }
-    list->images = util_common_calloc_s(sizeof(imagetool_image_summary *) * images_num);
+    list->images = util_smart_calloc_s(sizeof(imagetool_image_summary *), images_num);
     if (list->images == NULL) {
         ERROR("Out of memory");
         ret = -1;
diff --git a/src/daemon/modules/image/oci/oci_config_merge.c b/src/daemon/modules/image/oci/oci_config_merge.c
index 41529a11..dc9cbb74 100644
--- a/src/daemon/modules/image/oci/oci_config_merge.c
+++ b/src/daemon/modules/image/oci/oci_config_merge.c
@@ -73,12 +73,7 @@ static int do_duplicate_commands(const oci_image_spec_config *config, container_
         return 0;
     }
 
-    if (config->cmd_len > SIZE_MAX / sizeof(char *)) {
-        ERROR("too many commands!");
-        return -1;
-    }
-
-    container_spec->cmd = (char **)util_common_calloc_s(sizeof(char *) * config->cmd_len);
+    container_spec->cmd = (char **)util_smart_calloc_s(sizeof(char *), config->cmd_len);
     if (container_spec->cmd == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -239,13 +234,7 @@ static int dup_health_check_from_image(const defs_health_check *image_health_che
         return -1;
     }
 
-    if (image_health_check->test_len > SIZE_MAX / sizeof(char *)) {
-        ERROR("invalid health check commands!");
-        ret = -1;
-        goto out;
-    }
-
-    health_check->test = util_common_calloc_s(sizeof(char *) * image_health_check->test_len);
+    health_check->test = util_smart_calloc_s(sizeof(char *), image_health_check->test_len);
     if (health_check->test == NULL) {
         ERROR("Out of memory");
         ret = -1;
diff --git a/src/daemon/modules/image/oci/oci_load.c b/src/daemon/modules/image/oci/oci_load.c
index a8eecfe9..64ef2a1a 100644
--- a/src/daemon/modules/image/oci/oci_load.c
+++ b/src/daemon/modules/image/oci/oci_load.c
@@ -224,7 +224,7 @@ static char **str_array_copy(char **arr, size_t len)
     char **str_arr = NULL;
     size_t i = 0;
 
-    str_arr = util_common_calloc_s(sizeof(char *) * len);
+    str_arr = util_smart_calloc_s(sizeof(char *), len);
     if (str_arr == NULL) {
         ERROR("Out of memory");
         return NULL;
@@ -705,7 +705,8 @@ static int oci_load_set_layers_info(load_image_t *im, const image_manifest_items
     }
 
     if (conf->rootfs->diff_ids_len != im->layers_len) {
-        ERROR("Invalid manifest, layers length mismatch: expected %zu, got %zu", im->layers_len, conf->rootfs->diff_ids_len);
+        ERROR("Invalid manifest, layers length mismatch: expected %zu, got %zu", im->layers_len,
+              conf->rootfs->diff_ids_len);
         ret = -1;
         goto out;
     }
@@ -727,7 +728,8 @@ static int oci_load_set_layers_info(load_image_t *im, const image_manifest_items
         // The format is sha256:xxx
         im->layers[i]->chain_id = oci_load_calc_chain_id(parent_chain_id_sha256, conf->rootfs->diff_ids[i]);
         if (im->layers[i]->chain_id == NULL) {
-            ERROR("calc chain id failed, diff id %s, parent chain id %s", conf->rootfs->diff_ids[i], parent_chain_id_sha256);
+            ERROR("calc chain id failed, diff id %s, parent chain id %s", conf->rootfs->diff_ids[i],
+                  parent_chain_id_sha256);
             ret = -1;
             goto out;
         }
@@ -881,7 +883,7 @@ static int oci_load_set_manifest_info(load_image_t *im)
     }
 
     im->manifest->schema_version = OCI_SCHEMA_VERSION;
-    im->manifest->layers = util_common_calloc_s(sizeof(oci_image_content_descriptor *) * im->layers_len);
+    im->manifest->layers = util_smart_calloc_s(sizeof(oci_image_content_descriptor *), im->layers_len);
     if (im->manifest->layers == NULL) {
         ERROR("Out of memory");
         ret = -1;
diff --git a/src/daemon/modules/image/oci/registry/auths.c b/src/daemon/modules/image/oci/registry/auths.c
index f8cd7977..02b9753c 100644
--- a/src/daemon/modules/image/oci/registry/auths.c
+++ b/src/daemon/modules/image/oci/registry/auths.c
@@ -236,7 +236,7 @@ static int add_allocated_auth(registry_auths *auths, char *host, char *auth)
 
     result_len = auths->auths->len + 1;
     element = util_common_calloc_s(sizeof(defs_map_string_object_auths_element));
-    values = util_common_calloc_s(sizeof(defs_map_string_object_auths_element *) * result_len);
+    values = util_smart_calloc_s(sizeof(defs_map_string_object_auths_element *), result_len);
     if (element == NULL || values == NULL) {
         ERROR("out of memory");
         ret = -1;
diff --git a/src/daemon/modules/image/oci/registry/registry.c b/src/daemon/modules/image/oci/registry/registry.c
index 25973c71..e6369f90 100644
--- a/src/daemon/modules/image/oci/registry/registry.c
+++ b/src/daemon/modules/image/oci/registry/registry.c
@@ -132,7 +132,7 @@ static int parse_manifest_schema1(pull_descriptor *desc)
         goto out;
     }
 
-    desc->layers = util_common_calloc_s(sizeof(layer_blob) * manifest->fs_layers_len);
+    desc->layers = util_smart_calloc_s(sizeof(layer_blob), manifest->fs_layers_len);
     if (desc->layers == NULL) {
         ERROR("out of memory");
         ret = -1;
@@ -197,7 +197,7 @@ static int parse_manifest_schema2(pull_descriptor *desc)
         goto out;
     }
 
-    desc->layers = util_common_calloc_s(sizeof(layer_blob) * manifest->layers_len);
+    desc->layers = util_smart_calloc_s(sizeof(layer_blob), manifest->layers_len);
     if (desc->layers == NULL) {
         ERROR("out of memory");
         ret = -1;
@@ -250,7 +250,7 @@ static int parse_manifest_ociv1(pull_descriptor *desc)
         goto out;
     }
 
-    desc->layers = util_common_calloc_s(sizeof(layer_blob) * manifest->layers_len);
+    desc->layers = util_smart_calloc_s(sizeof(layer_blob), manifest->layers_len);
     if (desc->layers == NULL) {
         ERROR("out of memory");
         ret = -1;
@@ -390,7 +390,7 @@ static int add_cached_layer(char *blob_digest, char *file, thread_fetch_info *in
     struct linked_list *node = NULL;
     char *src_file = NULL;
     thread_fetch_info *src_info = NULL;
-    file_elem *elem = {NULL};
+    file_elem *elem = { NULL };
     pull_descriptor *desc = info->desc;
 
     cache = (cached_layer *)map_search(g_shared->cached_layers, blob_digest);
@@ -430,8 +430,8 @@ static int add_cached_layer(char *blob_digest, char *file, thread_fetch_info *in
                 ret = -1;
                 goto out;
             }
-            src_file = ((file_elem*)elem)->file;
-            src_info = ((file_elem*)elem)->info;
+            src_file = ((file_elem *)elem)->file;
+            src_info = ((file_elem *)elem)->info;
             if (src_info == NULL) {
                 ERROR("source info is NULL, this should never happen");
                 ret = -1;
@@ -561,16 +561,16 @@ static int set_cached_info_to_desc(thread_fetch_info *info)
     }
 
     if (desc->layers[i].diff_id == NULL) {
-        ERROR("layer %zu of image %s have invalid NULL diffid, info->use=%d, info->diffid=%s",
-              i, desc->image_name, info->use, info->diffid);
+        ERROR("layer %zu of image %s have invalid NULL diffid, info->use=%d, info->diffid=%s", i, desc->image_name,
+              info->use, info->diffid);
         return -1;
     }
 
     if (desc->layers[i].chain_id == NULL) {
         desc->layers[i].chain_id = calc_chain_id(desc->parent_chain_id, desc->layers[i].diff_id);
         if (desc->layers[i].chain_id == NULL) {
-            ERROR("calc chain id failed, diff id %s, parent chain id %s",
-                  desc->layers[i].diff_id, desc->parent_chain_id);
+            ERROR("calc chain id failed, diff id %s, parent chain id %s", desc->layers[i].diff_id,
+                  desc->parent_chain_id);
             return -1;
         }
     }
@@ -1177,7 +1177,7 @@ static void notify_cached_descs(char *blob_digest)
 
     // notify all related register threads to do register
     linked_list_for_each_safe(item, &cache->file_list, next) {
-        info = ((file_elem*)item->elem)->info;
+        info = ((file_elem *)item->elem)->info;
         info->notified = true;
         register_layer_notify(info->desc);
     }
@@ -1249,7 +1249,7 @@ static int add_fetch_task(thread_fetch_info *info)
     pthread_t tid = 0;
     bool cached_layers_added = true;
     cached_layer *cache = NULL;
-    struct timespec ts = {0};
+    struct timespec ts = { 0 };
 
     mutex_lock(&g_shared->mutex);
     cache = get_cached_layer(info->blob_digest);
@@ -1406,7 +1406,7 @@ static void *register_layers_in_thread(void *arg)
     int ret = 0;
     int cond_ret = 0;
     size_t i = 0;
-    struct timespec ts = {0};
+    struct timespec ts = { 0 };
 
     ret = pthread_detach(pthread_self());
     if (ret != 0) {
@@ -1425,8 +1425,8 @@ static void *register_layers_in_thread(void *arg)
                 // here we can't just break and cleanup resources because threads are running.
                 // desc is freed if we break and then isulad crash. sleep some time
                 // instead to avoid cpu full running and then retry.
-                ERROR("condition wait for layer %zu to complete failed, ret %d, error: %s",
-                      i, cond_ret, strerror(errno));
+                ERROR("condition wait for layer %zu to complete failed, ret %d, error: %s", i, cond_ret,
+                      strerror(errno));
                 sleep(10);
                 continue;
             }
@@ -1504,14 +1504,14 @@ static int fetch_all(pull_descriptor *desc)
     char *parent_chain_id = NULL;
     struct layer_list *list = NULL;
     pthread_t tid = 0;
-    struct timespec ts = {0};
+    struct timespec ts = { 0 };
 
     if (desc == NULL) {
         ERROR("Invalid NULL param");
         return -1;
     }
 
-    infos = util_common_calloc_s(sizeof(thread_fetch_info) * desc->layers_len);
+    infos = util_smart_calloc_s(sizeof(thread_fetch_info), desc->layers_len);
     if (infos == NULL) {
         ERROR("out of memory");
         return -1;
@@ -1611,8 +1611,7 @@ static int fetch_all(pull_descriptor *desc)
             // here we can't just break and cleanup resources because threads are running.
             // desc is freed if we break and then isulad crash. sleep some time
             // instead to avoid cpu full running and then retry.
-            ERROR("condition wait for all layers to complete failed, ret %d, error: %s",
-                  cond_ret, strerror(errno));
+            ERROR("condition wait for all layers to complete failed, ret %d, error: %s", cond_ret, strerror(errno));
             sleep(10);
             continue;
         }
diff --git a/src/daemon/modules/image/oci/storage/image_store/image_store.c b/src/daemon/modules/image/oci/storage/image_store/image_store.c
index edb28b78..3ee69ee7 100644
--- a/src/daemon/modules/image/oci/storage/image_store/image_store.c
+++ b/src/daemon/modules/image/oci/storage/image_store/image_store.c
@@ -2256,7 +2256,7 @@ static int pack_health_check_from_image(const oci_image_spec *spec, imagetool_im
         goto out;
     }
 
-    healthcheck->test = util_common_calloc_s(sizeof(char *) * spec->config->healthcheck->test_len);
+    healthcheck->test = util_smart_calloc_s(sizeof(char *), spec->config->healthcheck->test_len);
     if (healthcheck->test == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -2662,7 +2662,7 @@ int image_store_get_all_images(imagetool_images_list *images_list)
         goto unlock;
     }
 
-    images_list->images = util_common_calloc_s(g_image_store->images_list_len * sizeof(imagetool_image *));
+    images_list->images = util_smart_calloc_s(g_image_store->images_list_len, sizeof(imagetool_image *));
     if (images_list->images == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -3175,7 +3175,7 @@ static int get_layers_from_manifest(const registry_manifest_schema1 *manifest, l
         goto out;
     }
 
-    layers = util_common_calloc_s(sizeof(layer_blob) * manifest->fs_layers_len);
+    layers = util_smart_calloc_s(sizeof(layer_blob), manifest->fs_layers_len);
     if (layers == NULL) {
         ERROR("out of memory");
         ret = -1;
diff --git a/src/daemon/modules/image/oci/utils_images.c b/src/daemon/modules/image/oci/utils_images.c
index 415f2004..80a25502 100644
--- a/src/daemon/modules/image/oci/utils_images.c
+++ b/src/daemon/modules/image/oci/utils_images.c
@@ -305,7 +305,7 @@ char *make_big_data_base_name(const char *key)
     }
     name_size = 1 + strlen(b64_encode_name) + 1; // '=' + encode string + '\0'
 
-    base_name = (char *)util_common_calloc_s(name_size * sizeof(char));
+    base_name = (char *)util_smart_calloc_s(sizeof(char), name_size);
     if (base_name == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -436,7 +436,7 @@ int add_rootfs_and_history(const layer_blob *layers, size_t layers_len, const re
     }
 
     config->rootfs = util_common_calloc_s(sizeof(docker_image_rootfs));
-    config->history = util_common_calloc_s(sizeof(docker_image_history *) * layers_len);
+    config->history = util_smart_calloc_s(sizeof(docker_image_history *), layers_len);
     if (config->rootfs == NULL || config->history == NULL) {
         ERROR("out of memory");
         return -1;
diff --git a/src/daemon/modules/plugin/plugin.c b/src/daemon/modules/plugin/plugin.c
index 4e343a20..bd45f8a3 100644
--- a/src/daemon/modules/plugin/plugin.c
+++ b/src/daemon/modules/plugin/plugin.c
@@ -1123,12 +1123,7 @@ static int pm_init_plugin(const plugin_t *plugin)
      * prepare or delete dirty resource.
      */
     if (container_num) {
-        if (container_num > SIZE_MAX / sizeof(plugin_init_plugin_request_containers_element *)) {
-            ERROR("Invalid container nums");
-            ret = -1;
-            goto out;
-        }
-        reqs.containers = util_common_calloc_s(container_num * sizeof(plugin_init_plugin_request_containers_element *));
+        reqs.containers = util_smart_calloc_s(sizeof(plugin_init_plugin_request_containers_element *), container_num);
         if (reqs.containers == NULL) {
             ERROR("Out of memory");
             ret = -1;
diff --git a/src/daemon/modules/runtime/engines/lcr/lcr_rt_ops.c b/src/daemon/modules/runtime/engines/lcr/lcr_rt_ops.c
index f5313fa8..724def25 100644
--- a/src/daemon/modules/runtime/engines/lcr/lcr_rt_ops.c
+++ b/src/daemon/modules/runtime/engines/lcr/lcr_rt_ops.c
@@ -335,7 +335,7 @@ static int generate_user_string_by_uid_gid(const defs_process_user *puser, char
     }
 
     len = strlen(uid_str) + 1 + strlen(gid_str) + 1;
-    *user = (char *)util_common_calloc_s(len * sizeof(char));
+    *user = (char *)util_smart_calloc_s(sizeof(char), len);
     if (*user == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/daemon/modules/service/inspect_container.c b/src/daemon/modules/service/inspect_container.c
index b060fe12..3136433f 100644
--- a/src/daemon/modules/service/inspect_container.c
+++ b/src/daemon/modules/service/inspect_container.c
@@ -42,12 +42,7 @@ static int dup_path_and_args(const container_t *cont, char **path, char ***args,
         *path = util_strdup_s(cont->common_config->path);
     }
     if (cont->common_config->args_len > 0) {
-        if ((cont->common_config->args_len) > SIZE_MAX / sizeof(char *)) {
-            ERROR("Containers config args len is too many!");
-            ret = -1;
-            goto out;
-        }
-        *args = util_common_calloc_s(cont->common_config->args_len * sizeof(char *));
+        *args = util_smart_calloc_s(sizeof(char *), cont->common_config->args_len);
         if ((*args) == NULL) {
             ERROR("Out of memory");
             ret = -1;
@@ -111,12 +106,7 @@ static int dup_health_check_config(const container_config *src, container_inspec
         goto out;
     }
     if (src->healthcheck->test != NULL && src->healthcheck->test_len != 0) {
-        if (src->healthcheck->test_len > SIZE_MAX / sizeof(char *)) {
-            ERROR("health check test is too much!");
-            ret = -1;
-            goto out;
-        }
-        dest->health_check->test = util_common_calloc_s(src->healthcheck->test_len * sizeof(char *));
+        dest->health_check->test = util_smart_calloc_s(sizeof(char *), src->healthcheck->test_len);
         if (dest->health_check->test == NULL) {
             ERROR("Out of memory");
             ret = -1;
@@ -313,11 +303,7 @@ static int mount_point_to_inspect(const container_t *cont, container_inspect *in
     }
 
     len = cont->common_config->mount_points->len;
-    if (len > SIZE_MAX / sizeof(docker_types_mount_point *)) {
-        ERROR("Invalid mount point size");
-        return -1;
-    }
-    inspect->mounts = util_common_calloc_s(sizeof(docker_types_mount_point *) * len);
+    inspect->mounts = util_smart_calloc_s(sizeof(docker_types_mount_point *), len);
     if (inspect->mounts == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/daemon/modules/service/io_handler.c b/src/daemon/modules/service/io_handler.c
index d57894f2..893733bc 100644
--- a/src/daemon/modules/service/io_handler.c
+++ b/src/daemon/modules/service/io_handler.c
@@ -218,22 +218,18 @@ static void io_copy_thread_cleanup(struct io_write_wrapper *writers, struct io_c
     free(channels);
 }
 
-static int io_copy_init_fds(size_t len, int **infds, int **outfds, int **srcfds,
-                            struct io_write_wrapper **writers, transfer_channel_type **channels)
+static int io_copy_init_fds(size_t len, int **infds, int **outfds, int **srcfds, struct io_write_wrapper **writers,
+                            transfer_channel_type **channels)
 {
     size_t i;
 
-    if (len > SIZE_MAX / sizeof(struct io_write_wrapper)) {
-        ERROR("Invalid arguments");
-        return -1;
-    }
-    *srcfds = util_common_calloc_s(sizeof(int) * len);
+    *srcfds = util_smart_calloc_s(sizeof(int), len);
     if (*srcfds == NULL) {
         ERROR("Out of memory");
         return -1;
     }
 
-    *infds = util_common_calloc_s(sizeof(int) * len);
+    *infds = util_smart_calloc_s(sizeof(int), len);
     if (*infds == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -241,7 +237,7 @@ static int io_copy_init_fds(size_t len, int **infds, int **outfds, int **srcfds,
     for (i = 0; i < len; i++) {
         (*infds)[i] = -1;
     }
-    *outfds = util_common_calloc_s(sizeof(int) * len);
+    *outfds = util_smart_calloc_s(sizeof(int), len);
     if (*outfds == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -250,13 +246,13 @@ static int io_copy_init_fds(size_t len, int **infds, int **outfds, int **srcfds,
         (*outfds)[i] = -1;
     }
 
-    *writers = util_common_calloc_s(sizeof(struct io_write_wrapper) * len);
+    *writers = util_smart_calloc_s(sizeof(struct io_write_wrapper), len);
     if (*writers == NULL) {
         ERROR("Out of memory");
         return -1;
     }
 
-    *channels = util_common_calloc_s(sizeof(transfer_channel_type) * len);
+    *channels = util_smart_calloc_s(sizeof(transfer_channel_type), len);
     if (*channels == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -266,7 +262,6 @@ static int io_copy_init_fds(size_t len, int **infds, int **outfds, int **srcfds,
         (*channels)[i] = MAX_CHANNEL;
     }
     return 0;
-
 }
 typedef int (*src_io_type_handle)(int index, struct io_copy_arg *copy_arg, int *infds, int *srcfds);
 
@@ -305,8 +300,8 @@ static int handle_src_io_max(int index, struct io_copy_arg *copy_arg, int *infds
     return -1;
 }
 
-static int io_copy_make_srcfds(size_t len, struct io_copy_arg *copy_arg, int *infds,
-                               int *srcfds, transfer_channel_type *channels)
+static int io_copy_make_srcfds(size_t len, struct io_copy_arg *copy_arg, int *infds, int *srcfds,
+                               transfer_channel_type *channels)
 {
     size_t i;
 
@@ -536,11 +531,13 @@ int ready_copy_io_data(int sync_fd, bool detach, const char *fifoin, const char
     if (fifoout != NULL) {
         // fifos[1]  : lxc -> iSulad read
         // fifoout   : iSulad -> iSula write
-        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[1], IO_FIFO, (void *)fifoout, O_WRONLY, STDOUT_CHANNEL);
+        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[1], IO_FIFO, (void *)fifoout, O_WRONLY,
+                            STDOUT_CHANNEL);
     }
 
     if (fifoerr != NULL) {
-        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[2], IO_FIFO, (void *)fifoerr, O_WRONLY, STDERR_CHANNEL);
+        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[2], IO_FIFO, (void *)fifoerr, O_WRONLY,
+                            STDERR_CHANNEL);
     }
 
     if (stdin_fd > 0) {
@@ -548,11 +545,13 @@ int ready_copy_io_data(int sync_fd, bool detach, const char *fifoin, const char
     }
 
     if (stdout_handler != NULL) {
-        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[1], IO_FUNC, stdout_handler, O_WRONLY, STDOUT_CHANNEL);
+        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[1], IO_FUNC, stdout_handler, O_WRONLY,
+                            STDOUT_CHANNEL);
     }
 
     if (stderr_handler != NULL) {
-        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[2], IO_FUNC, stderr_handler, O_WRONLY, STDERR_CHANNEL);
+        add_io_copy_element(&io_copy[len++], IO_FIFO, (void *)fifos[2], IO_FUNC, stderr_handler, O_WRONLY,
+                            STDERR_CHANNEL);
     }
 
     if (start_io_copy_thread(sync_fd, detach, io_copy, len, tid) != 0) {
diff --git a/src/daemon/modules/service/service_container.c b/src/daemon/modules/service/service_container.c
index 43a4a0c9..f90ffd7d 100644
--- a/src/daemon/modules/service/service_container.c
+++ b/src/daemon/modules/service/service_container.c
@@ -1690,7 +1690,7 @@ static int dup_defs_process_user(defs_process_user *src, defs_process_user **dst
     (*dst)->gid = src->gid;
 
     if (src->additional_gids_len != 0) {
-        (*dst)->additional_gids = util_common_calloc_s(sizeof(gid_t) * src->additional_gids_len);
+        (*dst)->additional_gids = util_smart_calloc_s(sizeof(gid_t), src->additional_gids_len);
         if ((*dst)->additional_gids == NULL) {
             ERROR("Out of memory");
             ret = -1;
diff --git a/src/daemon/modules/spec/parse_volume.c b/src/daemon/modules/spec/parse_volume.c
index 7b02f6ca..40c4cecb 100644
--- a/src/daemon/modules/spec/parse_volume.c
+++ b/src/daemon/modules/spec/parse_volume.c
@@ -341,14 +341,14 @@ static int check_volume_element(const char *volume)
     return ret;
 }
 
-static int set_volume_element_options(defs_mount *mount_element, const char **modes, bool *with_rw,
-                                      bool *with_pro, bool *with_label)
+static int set_volume_element_options(defs_mount *mount_element, const char **modes, bool *with_rw, bool *with_pro,
+                                      bool *with_label)
 {
     const size_t max_options_len = 4;
     size_t options_len = 0;
     size_t i = 0;
 
-    mount_element->options = util_common_calloc_s(max_options_len * sizeof(char *));
+    mount_element->options = util_smart_calloc_s(sizeof(char *), max_options_len);
     if (mount_element->options == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/daemon/modules/spec/specs.c b/src/daemon/modules/spec/specs.c
index 7023fa41..cf4aa111 100644
--- a/src/daemon/modules/spec/specs.c
+++ b/src/daemon/modules/spec/specs.c
@@ -1305,11 +1305,7 @@ static int prepare_process_args(oci_runtime_spec *oci_spec, size_t args_len)
         oci_spec->process->args_len = 0;
     }
 
-    if (args_len > (SIZE_MAX / sizeof(char *))) {
-        return -1;
-    }
-
-    oci_spec->process->args = util_common_calloc_s(args_len * sizeof(char *));
+    oci_spec->process->args = util_smart_calloc_s(sizeof(char *), args_len);
     if (oci_spec->process->args == NULL) {
         return -1;
     }
diff --git a/src/daemon/modules/spec/specs_mount.c b/src/daemon/modules/spec/specs_mount.c
index e55832c5..62fd875c 100644
--- a/src/daemon/modules/spec/specs_mount.c
+++ b/src/daemon/modules/spec/specs_mount.c
@@ -376,7 +376,7 @@ static defs_mount *mount_point_to_defs_mnt(container_config_v2_common_config_mou
         return NULL;
     }
     mnt->options =
-        util_common_calloc_s(sizeof(char *) * (options_len + 3)); // +2 for readonly/propagation/selinux_relabel
+        util_smart_calloc_s(sizeof(char *), (options_len + 3)); // +2 for readonly/propagation/selinux_relabel
     if (mnt->options == NULL) {
         ERROR("Out of memory");
         ret = -1;
@@ -1154,12 +1154,7 @@ static host_config_devices_element **parse_multi_devices(const char *dir_host, c
         return NULL;
     }
 
-    if (devices_len > SIZE_MAX / sizeof(host_config_devices_element *)) {
-        ERROR("Too many devices");
-        return NULL;
-    }
-
-    dev_maps = util_common_calloc_s(devices_len * sizeof(host_config_devices_element *));
+    dev_maps = util_smart_calloc_s(sizeof(host_config_devices_element *), devices_len);
     if (dev_maps == NULL) {
         ERROR("Memory out");
         return NULL;
@@ -2312,7 +2307,7 @@ static bool mount_file(defs_mount ***all_mounts, size_t *all_mounts_len, const c
     bool ret = false;
     defs_mount *tmp_mounts = NULL;
 
-    options = util_common_calloc_s(options_len * sizeof(char *));
+    options = util_smart_calloc_s(sizeof(char *), options_len);
     if (options == NULL) {
         ERROR("Out of memory");
         goto out_free;
@@ -2359,7 +2354,7 @@ static bool add_host_channel_mount(defs_mount ***all_mounts, size_t *all_mounts_
     bool ret = false;
     defs_mount *tmp_mounts = NULL;
 
-    options = util_common_calloc_s(options_len * sizeof(char *));
+    options = util_smart_calloc_s(sizeof(char *), options_len);
     if (options == NULL) {
         ERROR("Out of memory");
         goto out_free;
@@ -3262,7 +3257,7 @@ static int merge_all_fs_mounts(host_config *host_spec, container_config *contain
         return 0;
     }
 
-    merged_mounts = util_common_calloc_s(sizeof(defs_mount *) * len);
+    merged_mounts = util_smart_calloc_s(sizeof(defs_mount *), len);
     if (merged_mounts == NULL) {
         ERROR("out of memory");
         ret = -1;
diff --git a/src/daemon/modules/spec/specs_security.c b/src/daemon/modules/spec/specs_security.c
index 8a8b2d86..643c2745 100644
--- a/src/daemon/modules/spec/specs_security.c
+++ b/src/daemon/modules/spec/specs_security.c
@@ -42,11 +42,11 @@
 
 static const char * const g_system_caps[] = { "SYS_BOOT",     "SETPCAP", "NET_RAW", "NET_BIND_SERVICE",
 #ifdef CAP_AUDIT_WRITE
-                                              "AUDIT_WRITE",
+                                             "AUDIT_WRITE",
 #endif
-                                              "DAC_OVERRIDE", "SETFCAP", "SETGID",  "SETUID",           "MKNOD", "CHOWN",
-                                              "FOWNER",       "FSETID",  "KILL",    "SYS_CHROOT"
-                                            };
+                                             "DAC_OVERRIDE", "SETFCAP", "SETGID",  "SETUID",           "MKNOD", "CHOWN",
+                                             "FOWNER",       "FSETID",  "KILL",    "SYS_CHROOT"
+                                           };
 
 static int append_capability(char ***dstcaps, size_t *dstcaps_len, const char *cap)
 {
@@ -83,12 +83,7 @@ static int copy_capabilities(char ***dstcaps, size_t *dstcaps_len, const char **
         *dstcaps_len = 0;
         return ret;
     }
-    if (srccaps_len > SIZE_MAX / sizeof(char *)) {
-        ERROR("Too many capabilities to copy!");
-        return -1;
-    }
-
-    *dstcaps = util_common_calloc_s(srccaps_len * sizeof(char *));
+    *dstcaps = util_smart_calloc_s(sizeof(char *), srccaps_len);
     if (*dstcaps == NULL) {
         ret = -1;
         goto out;
@@ -457,7 +452,7 @@ static bool meet_filtering_rules(const docker_seccomp *seccomp, const docker_sec
     return meet_include_arch && meet_include_cap && meet_exclude_arch && meet_exclude_cap;
 }
 
-static size_t docker_seccomp_arches_count(const char* seccomp_architecture, const docker_seccomp *docker_seccomp_spec)
+static size_t docker_seccomp_arches_count(const char *seccomp_architecture, const docker_seccomp *docker_seccomp_spec)
 {
     size_t count = 0;
     size_t i = 0;
@@ -468,7 +463,7 @@ static size_t docker_seccomp_arches_count(const char* seccomp_architecture, cons
     }
 
     for (i = 0; i < docker_seccomp_spec->arch_map_len; ++i) {
-        if (docker_seccomp_spec->arch_map[i] == NULL ||  docker_seccomp_spec->arch_map[i]->architecture == NULL) {
+        if (docker_seccomp_spec->arch_map[i] == NULL || docker_seccomp_spec->arch_map[i]->architecture == NULL) {
             continue;
         }
         if (strcmp(seccomp_architecture, docker_seccomp_spec->arch_map[i]->architecture) == 0) {
@@ -485,7 +480,7 @@ static size_t docker_seccomp_arches_count(const char* seccomp_architecture, cons
     return count;
 }
 
-static int dup_architectures_to_oci_spec(const char* seccomp_architecture, const docker_seccomp *docker_seccomp_spec,
+static int dup_architectures_to_oci_spec(const char *seccomp_architecture, const docker_seccomp *docker_seccomp_spec,
                                          oci_runtime_config_linux_seccomp *oci_seccomp_spec)
 {
     size_t i = 0;
@@ -503,7 +498,7 @@ static int dup_architectures_to_oci_spec(const char* seccomp_architecture, const
         return -1;
     }
 
-    oci_seccomp_spec->architectures = util_common_calloc_s(arch_size * sizeof(char *));
+    oci_seccomp_spec->architectures = util_smart_calloc_s(sizeof(char *), arch_size);
     if (oci_seccomp_spec->architectures == NULL) {
         ERROR("Failed to calloc memory for architectures in seccomp spec");
         return -1;
@@ -582,12 +577,7 @@ static int dup_syscall_args_to_oci_spec(const docker_seccomp_syscalls_element *d
     if (docker_syscall->args_len == 0) {
         return 0;
     }
-
-    if (docker_syscall->args_len > (SIZE_MAX / sizeof(defs_syscall_arg *))) {
-        return -1;
-    }
-
-    oci_syscall->args = util_common_calloc_s(docker_syscall->args_len * sizeof(defs_syscall_arg *));
+    oci_syscall->args = util_smart_calloc_s(sizeof(defs_syscall_arg *), docker_syscall->args_len);
     if (oci_syscall->args == NULL) {
         return -1;
     }
@@ -620,11 +610,7 @@ static int dup_syscall_to_oci_spec(const docker_seccomp *docker_seccomp_spec,
         return 0;
     }
 
-    if (docker_seccomp_spec->syscalls_len > (SIZE_MAX / sizeof(defs_syscall *))) {
-        return -1;
-    }
-
-    oci_seccomp_spec->syscalls = util_common_calloc_s(docker_seccomp_spec->syscalls_len * sizeof(defs_syscall *));
+    oci_seccomp_spec->syscalls = util_smart_calloc_s(sizeof(defs_syscall *), docker_seccomp_spec->syscalls_len);
     if (oci_seccomp_spec->syscalls == NULL) {
         return -1;
     }
@@ -639,12 +625,8 @@ static int dup_syscall_to_oci_spec(const docker_seccomp *docker_seccomp_spec,
         }
         oci_seccomp_spec->syscalls_len++;
 
-        if (docker_seccomp_spec->syscalls[i]->names_len > (SIZE_MAX / sizeof(char *))) {
-            return -1;
-        }
-
         oci_seccomp_spec->syscalls[k]->names =
-            util_common_calloc_s(docker_seccomp_spec->syscalls[i]->names_len * sizeof(char *));
+            util_smart_calloc_s(sizeof(char *), docker_seccomp_spec->syscalls[i]->names_len);
         if (oci_seccomp_spec->syscalls[k]->names == NULL) {
             return -1;
         }
@@ -670,8 +652,9 @@ static int dup_syscall_to_oci_spec(const docker_seccomp *docker_seccomp_spec,
     return 0;
 }
 
-static oci_runtime_config_linux_seccomp *trans_docker_seccomp_to_oci_format(const docker_seccomp *docker_seccomp_spec,
-                                                                            const defs_process_capabilities *capabilities)
+static oci_runtime_config_linux_seccomp *
+trans_docker_seccomp_to_oci_format(const docker_seccomp *docker_seccomp_spec,
+                                   const defs_process_capabilities *capabilities)
 {
     oci_runtime_config_linux_seccomp *oci_seccomp_spec = NULL;
 
@@ -771,11 +754,7 @@ static defs_syscall *make_seccomp_syscalls_element(const char **names, size_t na
     ret->action = util_strdup_s(action ? action : "");
     ret->args_len = args_len;
     if (args_len) {
-        if (args_len > SIZE_MAX / sizeof(defs_syscall_arg *)) {
-            CRIT("Too many seccomp syscalls!");
-            goto out;
-        }
-        ret->args = util_common_calloc_s(args_len * sizeof(defs_syscall_arg *));
+        ret->args = util_smart_calloc_s(sizeof(defs_syscall_arg *), args_len);
         if (ret->args == NULL) {
             CRIT("Memory allocation error.");
             goto out;
@@ -794,11 +773,7 @@ static defs_syscall *make_seccomp_syscalls_element(const char **names, size_t na
     }
 
     ret->names_len = names_len;
-    if (names_len > SIZE_MAX / sizeof(char *)) {
-        CRIT("Too many syscalls!");
-        goto out;
-    }
-    ret->names = util_common_calloc_s(names_len * sizeof(char *));
+    ret->names = util_smart_calloc_s(sizeof(char *), names_len);
     if (ret->names == NULL) {
         CRIT("Memory allocation error.");
         goto out;
diff --git a/src/daemon/modules/spec/verify.c b/src/daemon/modules/spec/verify.c
index 4bd11558..fe53bb0f 100644
--- a/src/daemon/modules/spec/verify.c
+++ b/src/daemon/modules/spec/verify.c
@@ -627,16 +627,12 @@ static bool is_cpuset_list_available(const char *provided, const char *available
     }
 
     cpu_num = sysinfo->ncpus;
-    if ((size_t)cpu_num > SIZE_MAX / sizeof(bool)) {
-        ERROR("invalid cpu num");
-        goto out;
-    }
-    parsed_provided = util_common_calloc_s(sizeof(bool) * (unsigned int)cpu_num);
+    parsed_provided = util_smart_calloc_s(sizeof(bool), (unsigned int)cpu_num);
     if (parsed_provided == NULL) {
         ERROR("memory alloc failed!");
         goto out;
     }
-    parsed_available = util_common_calloc_s(sizeof(bool) * (unsigned int)cpu_num);
+    parsed_available = util_smart_calloc_s(sizeof(bool), (unsigned int)cpu_num);
     if (parsed_available == NULL) {
         ERROR("memory alloc failed!");
         goto out;
@@ -1093,7 +1089,7 @@ static int verify_resources_device(defs_resources *resources)
 
     for (i = 0; i < resources->devices_len; i++) {
         if (!util_valid_device_mode(resources->devices[i]->access)) {
-            ERROR("Invalid device mode \"%s\" for device \"%" PRId64" %" PRId64 "\"", resources->devices[i]->access,
+            ERROR("Invalid device mode \"%s\" for device \"%" PRId64 " %" PRId64 "\"", resources->devices[i]->access,
                   resources->devices[i]->major, resources->devices[i]->minor);
             isulad_set_error_message("Invalid device mode \"%s\" for device \"%ld %ld\"", resources->devices[i]->access,
                                      resources->devices[i]->major, resources->devices[i]->minor);
diff --git a/src/daemon/modules/volume/local.c b/src/daemon/modules/volume/local.c
index 18961eb1..87b90317 100644
--- a/src/daemon/modules/volume/local.c
+++ b/src/daemon/modules/volume/local.c
@@ -87,7 +87,7 @@ void free_volumes_info(struct volumes_info *vols)
     return;
 }
 
-static struct volume * dup_volume(char *name, char *path)
+static struct volume *dup_volume(char *name, char *path)
 {
     struct volume *vol = NULL;
 
@@ -105,7 +105,7 @@ static struct volume * dup_volume(char *name, char *path)
     return vol;
 }
 
-struct volume * local_volume_get(char *name)
+struct volume *local_volume_get(char *name)
 {
     struct volume *v = NULL;
 
@@ -289,7 +289,7 @@ out:
 
 static int load_volumes(struct volumes_info *vols)
 {
-    return util_scan_subdirs((const char*)vols->root_dir, load_volume, vols);
+    return util_scan_subdirs((const char *)vols->root_dir, load_volume, vols);
 }
 
 static int local_volume_init(char *scope)
@@ -339,7 +339,7 @@ static int create_volume_meminfo(char *name, struct volume **vol)
     struct volume *v = NULL;
     int ret = 0;
     int sret = 0;
-    char path[PATH_MAX] = {0};
+    char path[PATH_MAX] = { 0 };
 
     v = util_common_calloc_s(sizeof(struct volume));
     if (v == NULL) {
@@ -367,7 +367,7 @@ out:
     return ret;
 }
 
-static struct volume * volume_create_nolock(char *name)
+static struct volume *volume_create_nolock(char *name)
 {
     struct volume *v = NULL;
     int ret = 0;
@@ -419,7 +419,7 @@ out:
     return v;
 }
 
-struct volume * local_volume_create(char *name)
+struct volume *local_volume_create(char *name)
 {
     struct volume *v_out = NULL;
     struct volume *v = NULL;
@@ -473,7 +473,7 @@ static struct volumes *new_empty_volumes(size_t size)
         return vols;
     }
 
-    vols->vols = util_common_calloc_s(sizeof(struct volume*) * size);
+    vols->vols = util_smart_calloc_s(sizeof(struct volume *), size);
     if (vols->vols == NULL) {
         ERROR("out of memory");
         free_volumes(vols);
@@ -483,7 +483,7 @@ static struct volumes *new_empty_volumes(size_t size)
     return vols;
 }
 
-struct volumes * local_volume_list(void)
+struct volumes *local_volume_list(void)
 {
     int ret = 0;
     map_itor *itor = NULL;
@@ -661,4 +661,3 @@ out:
 
     return ret;
 }
-
diff --git a/src/daemon/modules/volume/volume.c b/src/daemon/modules/volume/volume.c
index 9d496594..8255aff9 100644
--- a/src/daemon/modules/volume/volume.c
+++ b/src/daemon/modules/volume/volume.c
@@ -221,7 +221,7 @@ static struct volume_names * empty_volume_names(size_t size)
         return NULL;
     }
 
-    vns->names = util_common_calloc_s(sizeof(char *) * size);
+    vns->names = util_smart_calloc_s(sizeof(char *), size);
     if (vns->names == NULL) {
         ERROR("out of memory");
         ret = -1;
@@ -575,7 +575,7 @@ int volume_prune(struct volume_names **pruned)
     }
 
     if (list->vols_len != 0) {
-        (*pruned)->names = util_common_calloc_s(sizeof(char*) * list->vols_len);
+        (*pruned)->names = util_smart_calloc_s(sizeof(char *), list->vols_len);
         if ((*pruned)->names == NULL) {
             ret = -1;
             goto out;
diff --git a/src/utils/console/console.c b/src/utils/console/console.c
index b0dc7ee5..3565eef3 100644
--- a/src/utils/console/console.c
+++ b/src/utils/console/console.c
@@ -453,11 +453,8 @@ int console_loop_io_copy(int sync_fd, const int *srcfds, struct io_write_wrapper
     size_t i = 0;
     struct epoll_descr descr;
     struct tty_state *ts = NULL;
-    if (len > (SIZE_MAX / sizeof(struct tty_state)) - 1) {
-        ERROR("Invalid io size");
-        return -1;
-    }
-    ts = util_common_calloc_s(sizeof(struct tty_state) * (len + 1));
+
+    ts = util_smart_calloc_s(sizeof(struct tty_state), (len + 1));
     if (ts == NULL) {
         ERROR("Out of memory");
         return -1;
diff --git a/src/utils/cutils/utils_array.c b/src/utils/cutils/utils_array.c
index 448c9d9d..4e2ed6fd 100644
--- a/src/utils/cutils/utils_array.c
+++ b/src/utils/cutils/utils_array.c
@@ -72,11 +72,7 @@ int util_array_append(char ***array, const char *element)
     // let new len to len + 2 for element and null
     len = util_array_len((const char **)(*array));
 
-    if (len > SIZE_MAX / sizeof(char *) - 2) {
-        ERROR("Too many array elements!");
-        return -1;
-    }
-    new_array = util_common_calloc_s((len + 2) * sizeof(char *));
+    new_array = util_smart_calloc_s(sizeof(char *), (len + 2));
     if (new_array == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -92,8 +88,7 @@ int util_array_append(char ***array, const char *element)
     return 0;
 }
 
-int util_grow_array(char ***orig_array, size_t *orig_capacity, size_t size,
-                    size_t increment)
+int util_grow_array(char ***orig_array, size_t *orig_capacity, size_t size, size_t increment)
 {
     size_t add_capacity;
     char **add_array = NULL;
@@ -102,7 +97,7 @@ int util_grow_array(char ***orig_array, size_t *orig_capacity, size_t size,
         return -1;
     }
 
-    if (((*orig_array) == NULL)  || ((*orig_capacity) == 0)) {
+    if (((*orig_array) == NULL) || ((*orig_capacity) == 0)) {
         UTIL_FREE_AND_SET_NULL(*orig_array);
         *orig_capacity = 0;
     }
@@ -112,10 +107,7 @@ int util_grow_array(char ***orig_array, size_t *orig_capacity, size_t size,
         add_capacity += increment;
     }
     if (add_capacity != *orig_capacity) {
-        if (add_capacity > SIZE_MAX / sizeof(void *)) {
-            return -1;
-        }
-        add_array = util_common_calloc_s(add_capacity * sizeof(void *));
+        add_array = util_smart_calloc_s(sizeof(void *), add_capacity);
         if (add_array == NULL) {
             return -1;
         }
diff --git a/src/utils/cutils/utils_string.c b/src/utils/cutils/utils_string.c
index 8c9b2eea..de1cc60e 100644
--- a/src/utils/cutils/utils_string.c
+++ b/src/utils/cutils/utils_string.c
@@ -303,11 +303,7 @@ static char **util_shrink_array(char **orig_array, size_t new_size)
     if (new_size == 0) {
         return orig_array;
     }
-    if (new_size > SIZE_MAX / sizeof(char *)) {
-        ERROR("Invalid arguments");
-        return orig_array;
-    }
-    new_array = util_common_calloc_s(new_size * sizeof(char *));
+    new_array = util_smart_calloc_s(sizeof(char *), new_size);
     if (new_array == NULL) {
         return orig_array;
     }
@@ -724,11 +720,7 @@ int util_dup_array_of_strings(const char **src, size_t src_len, char ***dst, siz
 
     *dst = NULL;
     *dst_len = 0;
-    if (src_len > SIZE_MAX / sizeof(char *)) {
-        ERROR("Src elements is too much!");
-        return -1;
-    }
-    *dst = (char **)util_common_calloc_s(src_len * sizeof(char *));
+    *dst = (char **)util_smart_calloc_s(sizeof(char *), src_len);
     if (*dst == NULL) {
         ERROR("Out of memory");
         return -1;
@@ -853,7 +845,7 @@ int util_string_array_unique(const char **elements, size_t length, char ***uniqu
     }
 
     tmp_elements_len = map_size(map);
-    tmp_elements = (char **)util_common_calloc_s(tmp_elements_len * sizeof(char *));
+    tmp_elements = (char **)util_smart_calloc_s(sizeof(char *), tmp_elements_len);
     if (tmp_elements == NULL) {
         ERROR("Out of memory");
         ret = -1;
diff --git a/test/image/oci/oci_config_merge/oci_config_merge_ut.cc b/test/image/oci/oci_config_merge/oci_config_merge_ut.cc
index 3c9d5004..d94229b2 100644
--- a/test/image/oci/oci_config_merge/oci_config_merge_ut.cc
+++ b/test/image/oci/oci_config_merge/oci_config_merge_ut.cc
@@ -353,9 +353,7 @@ TEST(oci_config_merge_ut, test_oci_image_merge_config)
             tool_image->spec->config->entrypoint_len = 1;
         }
 
-        MOCK_SET_V(util_smart_calloc_s, util_smart_calloc_s_fail);
         ASSERT_EQ(oci_image_merge_config(tool_image, custom_config), 0);
-        MOCK_CLEAR(util_smart_calloc_s);
 
         free_imagetool_image(tool_image);
         tool_image = nullptr;
-- 
2.32.1 (Apple Git-133)

