Fix bugs reported at Coverity 74/274574/6 accepted/tizen/unified/20220505.024713 submit/tizen/20220503.075052
authorUnsung Lee <unsung.lee@samsung.com>
Tue, 3 May 2022 01:25:11 +0000 (10:25 +0900)
committerUnsung Lee <unsung.lee@samsung.com>
Tue, 3 May 2022 03:26:32 +0000 (12:26 +0900)
Change-Id: I53d75552aa0c0a580c816934de5952017999fbfe
Signed-off-by: Unsung Lee <unsung.lee@samsung.com>
src/common/cgroup/cgroup.c
src/common/util.c
src/common/util.h
src/process/watchdog/proc-watchdog-handler.c
src/process/watchdog/proc-watchdog.c
src/resource-optimizer/memory/swap/swap.c

index f107c2f..f56addb 100644 (file)
@@ -326,38 +326,45 @@ int cgroup_make_full_subdir(const char* parentdir)
        int result;
        char path[MAX_PATH_LENGTH] = {0, };
 
-       str_name_cpy(path, parentdir, strlen(parentdir) + 1);
+       result = str_name_cpy(path, parentdir, sizeof(path), strlen(parentdir));
+       ret_value_if(result < 0, result);
 
        for(int i = CGROUP_VIP; i < CGROUP_END; i++) {
                char name[MAX_NAME_LENGTH] = {0, };
 
                if(i == CGROUP_VIP) {
-                       str_name_cpy(name, MAKE_NAME(VIP), strlen(MAKE_NAME(VIP))+ 1);
+                       result = str_name_cpy(name, MAKE_NAME(VIP), sizeof(name), strlen(MAKE_NAME(VIP)));
+                       ret_value_if(result < 0, result);
                }
                else if(i == CGROUP_HIGH) {
-                       str_name_cpy(name, MAKE_NAME(HIGH), strlen(MAKE_NAME(HIGH))+ 1);
+                       result = str_name_cpy(name, MAKE_NAME(HIGH), sizeof(name), strlen(MAKE_NAME(HIGH)));
+                       ret_value_if(result < 0, result);
                }
                else if(i == CGROUP_MEDIUM) {
-                       str_name_cpy(name, MAKE_NAME(MEDIUM), strlen(MAKE_NAME(MEDIUM))+ 1);
+                       result = str_name_cpy(name, MAKE_NAME(MEDIUM), sizeof(name), strlen(MAKE_NAME(MEDIUM)));
+                       ret_value_if(result < 0, result);
                }
                else if(i == CGROUP_LOW) {
-                       str_name_cpy(name, MAKE_NAME(LOW), strlen(MAKE_NAME(LOW))+ 1);
+                       result = str_name_cpy(name, MAKE_NAME(LOW), sizeof(name), strlen(MAKE_NAME(LOW)));
+                       ret_value_if(result < 0, result);
                }
 
                result = cgroup_make_subdir(path, name, NULL);
                ret_value_msg_if(result < 0, result, "%s/%s init failed\n", path, name);
 
-               str_name_cat(path, "/", 2);
-               str_name_cat(path, name, strlen(name) + 1);
+               result = str_name_cat(path, "/", sizeof(path), strlen(path), 1);
+               ret_value_if(result < 0, result);
+               result = str_name_cat(path, name, sizeof(path), strlen(path), strlen(name));
+               ret_value_if(result < 0, result);
 
                // ../../perprocess
-               result = cgroup_make_subdir(path, MAKE_NAME(PER_PROCESS), NULL);
+/*             result = cgroup_make_subdir(path, MAKE_NAME(PER_PROCESS), NULL);
                ret_value_msg_if(result < 0, result, "%s/%s init failed\n",
                                path, MAKE_NAME(PER_PROCESS));
                // ../../group
                result = cgroup_make_subdir(path, MAKE_NAME(GROUP), NULL);
                ret_value_msg_if(result < 0, result, "%s/%s init failed\n",
-                               path, MAKE_NAME(GROUP));
+                               path, MAKE_NAME(GROUP));*/
        }
 
        return RESOURCED_ERROR_NONE;
index 0c63c42..79240f7 100644 (file)
@@ -130,11 +130,10 @@ int sched_getattr(pid_t pid, struct sched_attr *attr, unsigned int flags)
        attr->sched_nice = getpriority(PRIO_PROCESS, pid);
 
        error = sched_getparam(pid, &sp);
-       if (!error)
+       if (!error) {
                attr->sched_priority = sp.sched_priority;
-
-       if (attr->sched_policy > 0 && !error)
                return RESOURCED_ERROR_NONE;
+       }
        else
                return RESOURCED_ERROR_FAIL;
 #endif
@@ -422,3 +421,27 @@ void strv_free_full(char ***strv)
        free(*strv);
        *strv = NULL;
 }
+
+int str_name_cpy(char *dst, const char *src, int dst_size, int src_length)
+{
+       bool success = dst_size >= src_length + 1 ? true : false;
+       if (success) {
+               strncpy(dst, src, src_length + 1);
+               return RESOURCED_ERROR_NONE;
+       }
+       else {
+               return RESOURCED_ERROR_FAIL;
+       }
+}
+
+int str_name_cat(char *dst, const char *src, int dst_size, int dst_length, int src_length)
+{
+       bool success = dst_size >= dst_length + src_length + 1 ? true : false;
+       if (success) {
+               strncat(dst, src, src_length + 1);
+               return RESOURCED_ERROR_NONE;
+       }
+       else {
+               return RESOURCED_ERROR_FAIL;
+       }
+}
index be25e27..456d6af 100644 (file)
@@ -144,29 +144,6 @@ static inline bool strstart_with(const char *str, const char *with)
 #define FOREACH_STRV(s, l)                                              \
        for ((s) = (l); (s) && *(s); (s)++)
 
-#define str_name_cpy(dst, src, length)                                  \
-               do {                                                            \
-                       bool success = sizeof(dst) >= length ? true : false;        \
-                       if(success) {                                               \
-                               strncpy(dst, src, sizeof(dst) - 1);                     \
-                       }                                                           \
-                       else {                                                      \
-                               return RESOURCED_ERROR_OUT_OF_MEMORY;                   \
-                       }                                                           \
-               } while(0)
-
-#define str_name_cat(dst, src, length)                                          \
-               do {                                                                    \
-                       bool success = sizeof(dst) >= strlen(dst) + length ? true : false;  \
-                       if(success) {                                                       \
-                               strncat(dst, src, sizeof(dst) - strlen(dst) - 1);               \
-                       }                                                                   \
-                       else {                                                              \
-                               return RESOURCED_ERROR_OUT_OF_MEMORY;                           \
-                       }                                                                   \
-               } while(0)
-
-
 /**
  * @desc executes given command and dumps output to a file
  * @param argv - command to be executed with parameters
@@ -191,6 +168,9 @@ int resourced_restarted(void);
 int sched_setattr(pid_t pid, struct sched_attr *attr, unsigned int flags);
 int sched_getattr(pid_t pid, struct sched_attr *attr, unsigned int flags);
 
+int str_name_cpy(char *dst, const char *src, int dst_size, int src_length);
+int str_name_cat(char *dst, const char *src, int dst_size, int dst_length, int src_length);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 4d91ae4..63d900c 100644 (file)
@@ -81,7 +81,7 @@ int main(int argc, char *argv[])
        closedir(dir);
 
        fd = open(CHECK_RELEASE_PROGRESS, O_RDWR);
-       if (fd > 0) {
+       if (fd >= 0) {
                close(fd);
                return 0;
        }
index c6e2341..438925d 100644 (file)
@@ -160,7 +160,6 @@ static int proc_watchdog_process_disable(void *data)
 
 static int resourced_proc_watchdog_process_init(void *data)
 {
-       _cleanup_close_ int checkfd = -1;
        int r;
        int fd;
 
@@ -170,7 +169,7 @@ static int resourced_proc_watchdog_process_init(void *data)
        }
 
        fd = open(CHECK_RELEASE_PROGRESS, O_RDWR);
-       if (fd > 0) {
+       if (fd >= 0) {
                r = unlinkat(fd, CHECK_RELEASE_PROGRESS, 0);
                if (r < 0)
                        _E("[WATCHDOG] failed to remove %s: %m", CHECK_RELEASE_PROGRESS);
index 6d1a38f..c83ba69 100644 (file)
@@ -696,7 +696,14 @@ static int swap_start_handler(void *data)
        if (!bundle)
                return RESOURCED_ERROR_OUT_OF_MEMORY;
 
-       str_name_cpy(bundle->msg.path, path, strlen(path) + 1);
+       ret = str_name_cpy(bundle->msg.path, path, sizeof(bundle->msg.path), strlen(path));
+       if (ret < 0) {
+               _E("msg size (%d) is smaller than source length (%d)",
+                               (int)sizeof(bundle->msg.path), (int)strlen(path) + 1);
+               free(bundle);
+               return ret;
+       }
+
        bundle->op = SWAP_OP_RECLAIM;
        ret = swap_communicate_thread(bundle);
        return ret;