common: resolved secure coding errors devel/tizen_2.4
authorPrajwal A N <an.prajwal@samsung.com>
Wed, 23 Dec 2015 04:33:29 +0000 (13:33 +0900)
committerPrajwal A N <an.prajwal@samsung.com>
Thu, 24 Dec 2015 08:09:56 +0000 (17:09 +0900)
Change-Id: I5cec16ef63b09027dc02b42a3bec27780004b327
Signed-off-by: Prajwal A N <an.prajwal@samsung.com>
40 files changed:
src/block/block-monitor.c
src/common/edbus-handler.c
src/common/filemap.c
src/common/module.c
src/common/proc-common.h
src/common/procfs.c
src/common/smaps.c
src/common/storage-helper.c
src/common/systemd-util.c
src/common/util.h
src/cpu/cpu.c
src/heart/heart-appopt.c
src/heart/heart-battery.c
src/heart/heart-memory.c
src/heart/heart.c
src/heart/logging.c
src/memory/memcontrol.c
src/memory/vmpressure-lowmem-handler.c
src/memps/memps.c
src/network/app-stat.c
src/network/counter-process.c
src/network/datausage-common.c
src/network/datausage-quota-processing.c
src/network/generic-netlink.c
src/network/iface.c
src/network/iptables-rule.c
src/network/net-cls-cgroup.c
src/network/options-private.c
src/network/restriction-handler.c
src/network/restriction-local.c
src/network/telephony.c
src/proc-stat/proc-appusage.c
src/proc-stat/proc-info.c
src/proc-stat/proc-monitor.c
src/proc-stat/proc-noti.c
src/proc-stat/proc-stat.c
src/swap/swap.c
src/timer-slack/timer-slack.c
src/utils/datausage-tool.c
src/utils/iptables-test.c

index 1257d906b4213892361f801f7de45a1f36387eba..7a697a1a4a42f4a6bb8aea06ce391a10495d1cc7 100644 (file)
@@ -241,7 +241,8 @@ static Eina_Bool block_monitor_cb(void *user_data, Ecore_Fd_Handler *fd_handler)
                block_logging(bmi, m->pid, label, buf);
 
        next:
-               close(m->fd);
+               if (m->fd >= 0)
+                       close(m->fd);
        }
        return ECORE_CALLBACK_RENEW;
 }
@@ -289,7 +290,7 @@ int register_fanotify(struct block_monitor_info *bmi)
        block_logging_init(bmi);
        return RESOURCED_ERROR_NONE;
 error:
-       if (bmi->mfd) {
+       if (bmi->mfd > 0) {
                close(bmi->mfd);
                bmi->mfd = 0;
        }
index 709227c6543956f7b84aa707a786239d4eccc16c..08e7c72e17c46445bbbb39bd2390f7c55c01773e 100644 (file)
@@ -318,9 +318,10 @@ int register_edbus_interface(struct edbus_object *object)
 E_DBus_Interface *get_edbus_interface(const char *path)
 {
        int i;
+       int pathlen = strlen(path) + 1;
 
        for (i = 0; i < ARRAY_SIZE(edbus_objects); i++)
-               if (!strcmp(path, edbus_objects[i].path))
+               if (!strncmp(path, edbus_objects[i].path, pathlen))
                        return edbus_objects[i].iface;
 
        return NULL;
index 9d24a5e90841da8e69e1a8fee102cefdd7a2fe3e..21017da331cac5452f6bbf828f68b60c7a299a7f 100644 (file)
@@ -393,7 +393,7 @@ int filemap_write(struct filemap *fm, const char *key, const char *value,
 
        if (*offset) {
                fi = filemap_to_info(fm, offset);
-               if (fi && !strcmp(fi->key, key))
+               if (fi && !strncmp(fi->key, key, keylen+1))
                        _D("fi for key %s is found using offset", fi->key);
                else
                        fi = NULL;
index 352b75eef988573cdc295ebf94ef9e44753605db..b43c32fc638fd00a36a872a9bf0fed2ad17e6b8a 100644 (file)
@@ -53,7 +53,7 @@ const struct module_ops *find_module(const char *name)
 
        gslist_for_each_item(iter, modules_list) {
                module = (struct module_ops *)iter->data;
-               if (!strcmp(module->name, name))
+               if (!strncmp(module->name, name, strlen(module->name)+1))
                        return module;
        }
        return NULL;
index a53283661536f77602a45977d16f7c94624a99f6..116954076dfd8756f1f5c733f5052ee7ee26773b 100644 (file)
@@ -174,7 +174,7 @@ int proc_get_appflag(const pid_t pid);
 
 static inline int equal_name_info(const char *id_a, const char *id_b)
 {
-       return !strcmp(id_a, id_b);
+       return !strncmp(id_a, id_b, strlen(id_b)+1);
 }
 
 int proc_get_svc_state(struct proc_program_info *ppi);
index 6677e6cf803d7b17eda72f689d3aac6a69de1ce7..611dd92ca76f093cffdcb3f568e5cd609a07b30b 100644 (file)
@@ -107,7 +107,7 @@ pid_t find_pid_from_cmdline(char *cmdline)
                        continue;
                ret = proc_get_cmdline(pid, appname);
                if (ret == RESOURCED_ERROR_NONE) {
-                       if (!strcmp(cmdline, appname)) {
+                       if (!strncmp(cmdline, appname, strlen(appname)+1)) {
                                foundpid = pid;
                                break;
                        }
@@ -243,12 +243,13 @@ unsigned int proc_get_swap_free(void)
 {
        struct meminfo mi;
        int r;
+       char error_buf[256];
 
        r = proc_get_meminfo(&mi, MEMINFO_MASK_SWAP_FREE);
        if (r < 0) {
                _E("Failed to get %s: %s",
                   meminfo_id_to_string(MEMINFO_ID_SWAP_FREE),
-                  strerror(-r));
+                  strerror_r(-r, error_buf, sizeof(error_buf)));
                return 0;
        }
 
@@ -357,6 +358,7 @@ int proc_get_status(pid_t pid, char *buf, int len)
 int proc_sys_node_trigger(enum sys_node_id sys_node_id)
 {
        FILE *fp = NULL;
+       char error_buf[256];
 
        if (sys_node_id >= ARRAY_SIZE(sys_node_tables)) {
                _E("sys_node_id[%d] is out of range.\n", sys_node_id);
@@ -371,7 +373,8 @@ int proc_sys_node_trigger(enum sys_node_id sys_node_id)
        fp = fopen(sys_node_tables[sys_node_id].path, "w");
        if (fp == NULL) {
                _E("Failed to open: %s: %s\n",
-                       sys_node_tables[sys_node_id].path, strerror(errno));
+                       sys_node_tables[sys_node_id].path,
+                       strerror_r(errno, error_buf, sizeof(error_buf)));
                sys_node_tables[sys_node_id].valid = 0;
                return RESOURCED_ERROR_FAIL;
        }
index 22aefd2a6bf2da2e370a87604e6c7930513a33a8..2139d49a640a193ef860f1f4688bf9babb0fdc6a 100644 (file)
@@ -156,7 +156,7 @@ int smaps_get(pid_t pid, struct smaps **maps, enum smap_mask mask)
                           &map->start, &map->end, &map->mode, &map->name);
 
                if (n == 3 && !map->name)
-                       map->name = strdup("[anon]");
+                       map->name = strndup("[anon]", strlen("[anon]"));
                else if (n != 4) {
                        free(map);
                        r = -EINVAL;
index 9e750881b62b6abfc6fa5c375d5f59685db99e91..03dcde4962a6d58f5d61f8a24a78da47f02106c1 100644 (file)
@@ -45,7 +45,7 @@ bool is_mounted(const char* path)
        if (!fp)
                return ret;
        while ((mnt = getmntent(fp))) {
-               if (!strcmp(mnt->mnt_dir, path)) {
+               if (!strncmp(mnt->mnt_dir, path, strlen(path)+1)) {
                        ret = true;
                        break;
                }
index a8d8cf3dd24576c2db4189c8426c39e1fb5973a2..22fc69ae7a5a0d4a0a9cfd7ef132b55b55b882da 100644 (file)
@@ -86,7 +86,8 @@ static int systemd_get_unit_obj_path(const char *unit_name,
 
        *obj_path = strndup(path, strlen(path));
        if (!*obj_path) {
-               _E("failed to duplicate object path: %s", strerror_r(ENOMEM, buf, sizeof(buf)));
+               str_err = strerror_r(ENOMEM, buf, sizeof(buf));
+               _E("failed to duplicate object path: %s", str_err);
                *err_msg = strndup(str_err, strlen(str_err));
                if (!*err_msg)
                        _E("failed to duplicate dbus error message");
index a5906c796af05d08a0b54575462c1f058a4bd3a5..76ee291b0bf1be8a20c90fe9f997ddd2431cdcb3 100644 (file)
@@ -89,7 +89,7 @@ static inline void closedirp(DIR **d)
 #define GBYTE_TO_KBYTE(g) ((g) << 20)
 #define GBYTE_TO_MBYTE(g) ((g) << 10)
 
-#define streq(a,b) (strcmp((a),(b)) == 0)
+#define streq(a,b) (strncmp((a),(b), strlen(b)+1) == 0)
 #define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
 #define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
 #define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
index 1d177f338dcb6f8658ba2b200712345246f77f33..b68b287b553ab011228338563d936c253f7db6de 100644 (file)
@@ -159,9 +159,9 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, CPU_CONF_SECTION))
+       if (strncmp(result->section, CPU_CONF_SECTION, strlen(CPU_CONF_SECTION)+1))
                return RESOURCED_ERROR_NO_DATA;
-       if (!strcmp(result->name, CPU_CONF_PREDEFINE)) {
+       if (!strncmp(result->name, CPU_CONF_PREDEFINE, strlen(CPU_CONF_PREDEFINE)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0) {
                        cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
@@ -170,7 +170,7 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
                } else {
                        _E("not found appname = %s", result->value);
                }
-       } else if (!strcmp(result->name, CPU_CONF_BOOTING)) {
+       } else if (!strncmp(result->name, CPU_CONF_BOOTING, strlen(CPU_CONF_BOOTING)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0) {
                        cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
@@ -178,7 +178,7 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
                        def_list.control[def_list.num++].type = SET_BOOTING;
                        setpriority(PRIO_PROCESS, pid, CPU_BACKGROUND_PRI);
                }
-       } else if (!strcmp(result->name, CPU_CONF_WRT)) {
+       } else if (!strncmp(result->name, CPU_CONF_WRT, strlen(CPU_CONF_WRT)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0) {
                        cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
@@ -187,24 +187,24 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
                        setpriority(PRIO_PROCESS, pid, CPU_CONTROL_PRI);
                        ioprio_set(IOPRIO_WHO_PROCESS, pid, IOPRIO_CLASS_IDLE << IOPRIO_CLASS_SHIFT);
                }
-       } else if (!strcmp(result->name, CPU_CONF_LAZY)) {
+       } else if (!strncmp(result->name, CPU_CONF_LAZY, strlen(CPU_CONF_LAZY)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0) {
                        def_list.control[def_list.num].pid = pid;
                        def_list.control[def_list.num++].type = SET_LAZY;
                }
-       } else if (!strcmp(result->name, CPU_CONF_SYSTEM)) {
+       } else if (!strncmp(result->name, CPU_CONF_SYSTEM, strlen(CPU_CONF_SYSTEM)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0)
                        cpu_move_cgroup(pid, CPU_CONTROL_GROUP);
-       } else if (!strcmp(result->name, CPU_CONF_HOME)) {
+       } else if (!strncmp(result->name, CPU_CONF_HOME, strlen(CPU_CONF_HOME)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0) {
                        setpriority(PRIO_PROCESS, pid, CPU_HIGHAPP_PRI);
                        def_list.control[def_list.num].pid = pid;
                        def_list.control[def_list.num++].type = SET_BOOTING;
                }
-       } else if (!strcmp(result->name, "BACKGROUND_CPU_SHARE")) {
+       } else if (!strncmp(result->name, "BACKGROUND_CPU_SHARE", strlen("BACKGROUND_CPU_SHARE")+1)) {
                value = atoi(result->value);
                if (value) {
                        cgroup_write_node(CPU_CONTROL_GROUP, CPU_SHARE, value);
@@ -212,14 +212,14 @@ static int load_cpu_config(struct parse_result *result, void *user_data)
                }
                if (cpu_quota_enabled())
                        cgroup_write_node(CPU_CONTROL_CPUQUOTA_GROUP, CPU_SHARE, value);
-       } else if (!strcmp(result->name, "BACKGROUND_CPU_MAX_QUOTA")) {
+       } else if (!strncmp(result->name, "BACKGROUND_CPU_MAX_QUOTA", strlen("BACKGROUND_CPU_MAX_QUOTA")+1)) {
                value = atoi(result->value);
                if (value && cpu_quota_enabled()) {
                        value *= CPU_QUOTA_PERIOD_USEC;
                        cgroup_write_node(CPU_CONTROL_DOWNLOAD_GROUP,
                                    CPU_CONTROL_BANDWIDTH, value);
                }
-       } else if (!strcmp(result->name, "BACKGROUND_CPU_MIN_QUOTA")) {
+       } else if (!strncmp(result->name, "BACKGROUND_CPU_MIN_QUOTA", strlen("BACKGROUND_CPU_MIN_QUOTA")+1)) {
                value = atoi(result->value);
                if (value && cpu_quota_enabled()) {
                        value *= CPU_QUOTA_PERIOD_USEC;
index 6901214ef3868e84ad82922625a7acf26dc6c710..d0d3603e2e40006e1f0381a22d1a87bdb0d53801 100644 (file)
@@ -711,13 +711,13 @@ static void heart_appopt_pkgmgr_status(void *data, DBusMessage *msg)
           "req_id: %s, pkgtype: %s, pkgid: %s, key: %s, val: %s",
            req_id, pkgtype, pkgid, key, val);
 
-       if (!strcmp(key, APPOPT_STR_START)) {
-               if (!strcmp(val, APPOPT_STR_INSTALL))
+       if (!strncmp(key, APPOPT_STR_START, strlen(APPOPT_STR_START)+1)) {
+               if (!strncmp(val, APPOPT_STR_INSTALL, strlen(APPOPT_STR_INSTALL)+1))
                        pkg_install = 1;
-               else if (!strcmp(val, APPOPT_STR_UNINSTALL))
+               else if (!strncmp(val, APPOPT_STR_UNINSTALL, strlen(APPOPT_STR_UNINSTALL)+1))
                        pkg_uninstall = 1;
-       } else if (!strcmp(key, APPOPT_STR_END)) {
-               if (!strcmp(val, APPOPT_STR_OK)) {
+       } else if (!strncmp(key, APPOPT_STR_END, strlen(APPOPT_STR_END)+1)) {
+               if (!strncmp(val, APPOPT_STR_OK, strlen(APPOPT_STR_OK)+1)) {
                        if (pkg_install) {
                                gettimeofday(&tv, NULL);
                                ret = heart_appopt_enqueue_insert_cmd(pkgid, tv.tv_sec,
index 3e67ac46948ed04ff70e88baa9a97825a5504f3a..e79a02ac19ecc28d91ca76d075efde48a5264aee 100644 (file)
@@ -1901,20 +1901,20 @@ static int heart_battery_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, HEART_BATTERY_CONF_SECTION))
+       if (strncmp(result->section, HEART_BATTERY_CONF_SECTION, strlen(HEART_BATTERY_CONF_SECTION)+1))
                return RESOURCED_ERROR_NONE;
 
-       if (!strcmp(result->name, "POWER_NORMAL_MODE")) {
+       if (!strncmp(result->name, "POWER_NORMAL_MODE", strlen("POWER_NORMAL_MODE")+1)) {
                val = atoi(result->value);
                if (val > 0)
                        default_mode_spc[POWER_NORMAL_MODE] = val;
                _D("POWER_NORMAL_MODE SPC: %d", val);
-       } else if (!strcmp(result->name, "POWER_SAVING_MODE")) {
+       } else if (!strncmp(result->name, "POWER_SAVING_MODE", strlen("POWER_SAVING_MODE")+1)) {
                val = atoi(result->value);
                if (val > 0)
                        default_mode_spc[POWER_SAVING_MODE] = val;
                _D("POWER_SAVING_MODE SPC: %d", val);
-       } else if (!strcmp(result->name, "ULTRA_SAVING_MODE")) {
+       } else if (!strncmp(result->name, "ULTRA_SAVING_MODE", strlen("ULTRA_SAVING_MODE")+1)) {
                val = atoi(result->value);
                if (val > 0)
                        default_mode_spc[ULTRA_SAVING_MODE] = val;
index 58e8639f065293582aaad76341ea83ded5279841..2aedcb13155548a319db7eafff009a6d73d36eb3 100644 (file)
@@ -344,7 +344,7 @@ void heart_memory_fill_array(struct logging_table_form *data, void *user_data)
                struct heart_memory_data *loop;
                loop = g_array_index(send, struct heart_memory_data *, i);
 
-               if (!strcmp(loop->appid, data->appid)) {
+               if (!strncmp(loop->appid, data->appid, strlen(data->appid)+1)) {
                        md = loop;
                        break;
                }
@@ -1103,6 +1103,7 @@ static int heart_memory_write(char *appid, char *pkgid, struct proc_status *p_da
        _cleanup_free_ char *info = NULL;
        unsigned int pss = 0, uss = 0;
        int ret;
+       char error_buf[256];
 
        /* For write to data crud during period */
        /* write memory usage in proc_list */
@@ -1114,7 +1115,8 @@ static int heart_memory_write(char *appid, char *pkgid, struct proc_status *p_da
                         SMAPS_MASK_SWAP));
        if (ret < 0) {
                _E("Failed to get PID(%d) smaps: %s",
-                  p_data->pid, strerror(-ret));
+                  p_data->pid,
+                  strerror_r(-ret, error_buf, sizeof(error_buf)));
                return ret;
        }
 
index ba4d4ac768f108486ee394c1ed4cb7510ad62b3a..45db1fd48b71ac34a94caf2fa84c9210c7651c6d 100644 (file)
@@ -58,7 +58,7 @@ static const struct heart_module_ops *heart_module_find(const char *name)
 
        gslist_for_each_item(iter, heart_module) {
                module = (struct heart_module_ops *)iter->data;
-               if (!strcmp(module->name, name))
+               if (!strncmp(module->name, name, strlen(name)+1))
                        return module;
        }
        return NULL;
@@ -104,14 +104,14 @@ static int heart_load_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, HEART_CONF_SECTION))
+       if (strncmp(result->section, HEART_CONF_SECTION, strlen(HEART_CONF_SECTION)+1))
                return RESOURCED_ERROR_FAIL;
 
        ops = heart_module_find(result->name);
        if (!ops)
                return RESOURCED_ERROR_FAIL;
 
-       if (!strcmp(result->value, "ON"))
+       if (!strncmp(result->value, "ON", 3))
                *count = *count + 1;
        else
                heart_module_remove(ops);
index f93eee8962c9ef565d523b6b2faa50b07da4c3dc..042b532c5b7d0393c8f48a5659b91ce061d5e166 100644 (file)
@@ -157,6 +157,7 @@ long logging_get_time_ms(void)
 static struct logging_module *logging_find_module(char *name)
 {
        int i;
+       int namelen = strlen(name) + 1;
 
        if (!logging_modules)
                return NULL;
@@ -164,7 +165,7 @@ static struct logging_module *logging_find_module(char *name)
        for (i = 0; i < logging_modules->len; i++) {
                struct logging_module *module = g_array_index(logging_modules,
                                struct logging_module *, i);
-               if (!strcmp(name, module->name)) {
+               if (!strncmp(name, module->name, namelen)) {
                        return module;
                }
        }
@@ -278,6 +279,7 @@ int logging_module_init_with_db_path(char *name, enum logging_period max_period,
 
        if (asprintf(&(module->db_path), "%s", path) < 0) {
                _E("asprintf failed");
+               free(module->name);
                free(module);
                return RESOURCED_ERROR_OUT_OF_MEMORY;
        }
@@ -287,6 +289,7 @@ int logging_module_init_with_db_path(char *name, enum logging_period max_period,
        if (pthread_mutex_init(&module->cache_mutex, NULL) < 0) {
                _E("%s module mutex_init failed %d", name, errno);
                free(module->name);
+               free(module->db_path);
                free(module);
                return RESOURCED_ERROR_FAIL;
        }
@@ -296,6 +299,7 @@ int logging_module_init_with_db_path(char *name, enum logging_period max_period,
        if (!module->cache) {
                _E("g_queue_new failed");
                free(module->name);
+               free(module->db_path);
                free(module);
                return RESOURCED_ERROR_OUT_OF_MEMORY;
        }
@@ -617,7 +621,7 @@ int logging_get_latest_in_cache(char *name, char *appid, char **data)
                table = g_queue_peek_nth(module->cache, i);
 
                if (table &&
-                       !strcmp(appid, table->appid))
+                       !strncmp(appid, table->appid, strlen(table->appid)+1))
                        *data = table->data;
        }
        pthread_mutex_unlock(&(module->cache_mutex));
@@ -635,7 +639,7 @@ static void logging_cache_search(struct logging_table_form *data, struct logging
        /* search in cache */
        /* true condition, call function */
        if (search->appid) {
-               if (strcmp(search->appid, data->appid))
+               if (strncmp(search->appid, data->appid, strlen(data->appid)+1))
                        return;
 
                if (search->start && search->start < data->time)
@@ -644,7 +648,7 @@ static void logging_cache_search(struct logging_table_form *data, struct logging
                if (search->end && search->end > data->time)
                        return;
        } else if (search->pkgid) {
-               if (strcmp(search->pkgid, data->pkgid))
+               if (strncmp(search->pkgid, data->pkgid, strlen(data->pkgid)+1))
                        return;
 
                if (search->start && search->start < data->time)
index f4dcd2017fa52220a95f7d504810740bcbeb5fd6..09f5313e3c52aca518ebf08dcc7772eacca097ca 100644 (file)
@@ -171,9 +171,9 @@ int memcg_get_anon_usage(struct memcg_info *mi, unsigned int *anon_usage)
        }
        while (fgets(line, BUF_MAX, f) != NULL) {
                if (sscanf(line, "%s %d", name, &tmp)) {
-                       if (!strcmp(name, "inactive_anon")) {
+                       if (!strncmp(name, "inactive_anon", strlen("inactive_anon")+1)) {
                                inactive_anon = tmp;
-                       } else if (!strcmp(name, "active_anon")) {
+                       } else if (!strncmp(name, "active_anon", strlen("active_anon")+1)) {
                                active_anon = tmp;
                                break;
                        }
index e9d796a08adda590e1c94b8d1ffeed69dac706dc..fdb7efd3d1d7d7e02f506bace3e6418e0a54008b 100644 (file)
@@ -418,7 +418,7 @@ int compare_func(const struct dirent **a, const struct dirent **b)
        char *str_at = strrchr(fn_a, '_') + 1;
        char *str_bt = strrchr(fn_b, '_') + 1;
 
-       return strcmp(str_at, str_bt);
+       return strncmp(str_at, str_bt, strlen(str_bt)+1);
 }
 
 static void clear_logs(char *dir)
@@ -588,9 +588,9 @@ static void lowmem_kill_victim(struct task_info *tsk,
        if (ret == RESOURCED_ERROR_FAIL)
                return;
 
-       if (!strcmp("memps", appname) ||
-           !strcmp("crash-worker", appname) ||
-           !strcmp("system-syspopup", appname)) {
+       if (!strncmp("memps", appname, strlen(appname)+1) ||
+           !strncmp("crash-worker", appname, strlen(appname)+1) ||
+           !strncmp("system-syspopup", appname, strlen(appname)+1)) {
                _E("%s(%d) was selected, skip it", appname, pid);
                return;
        }
@@ -835,8 +835,11 @@ static int lowmem_get_pids_proc(GArray *pids)
                        continue;
 
                pid = (pid_t)atoi(dentry.d_name);
+               if (pid < 0)
+                       continue;
+
                pgid = getpgid(pid);
-               if (!pgid)
+               if (pgid < 0)
                        continue;
 
                if (proc_get_oom_score_adj(pid, &oom) < 0) {
@@ -1371,10 +1374,10 @@ static int load_vip_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, MEM_VIP_SECTION))
+       if (strncmp(result->section, MEM_VIP_SECTION, strlen(MEM_VIP_SECTION)+1))
                return RESOURCED_ERROR_NONE;
 
-       if (!strcmp(result->name, MEM_VIP_PREDEFINE)) {
+       if (!strncmp(result->name, MEM_VIP_PREDEFINE, strlen(MEM_VIP_PREDEFINE)+1)) {
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0)
                        proc_set_oom_score_adj(pid, OOMADJ_SERVICE_MIN);
@@ -1387,13 +1390,13 @@ static int load_mem_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, MEM_POPUP_SECTION))
+       if (strncmp(result->section, MEM_POPUP_SECTION, strlen(MEM_POPUP_SECTION)+1))
                return RESOURCED_ERROR_NONE;
 
-       if (!strcmp(result->name, MEM_POPUP_STRING)) {
-               if (!strcmp(result->value, "yes"))
+       if (!strncmp(result->name, MEM_POPUP_STRING, strlen(MEM_POPUP_STRING)+1)) {
+               if (!strncmp(result->value, "yes", strlen("yes")+1))
                        oom_popup_enable = 1;
-               else if (!strcmp(result->value, "no"))
+               else if (!strncmp(result->value, "no", strlen("no")+1))
                        oom_popup_enable = 0;
        }
 
@@ -1407,42 +1410,42 @@ static int set_memory_config(const char *section_name, const struct parse_result
        if (!result || !section_name)
                return -EINVAL;
 
-       if (strcmp(result->section, section_name))
+       if (strncmp(result->section, section_name, strlen(section_name)+1))
                return RESOURCED_ERROR_NONE;
 
-       if (!strcmp(result->name, "ThresholdSwap")) {
+       if (!strncmp(result->name, "ThresholdSwap", strlen("ThresholdSwap")+1)) {
                int value = atoi(result->value);
                lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_SWAP, value);
-       } else if (!strcmp(result->name, "ThresholdLow")) {
+       } else if (!strncmp(result->name, "ThresholdLow", strlen("ThresholdLow")+1)) {
                int value = atoi(result->value);
                lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_LOW, value);
-       } else if (!strcmp(result->name, "ThresholdMedium")) {
+       } else if (!strncmp(result->name, "ThresholdMedium", strlen("ThresholdMedium")+1)) {
                int value = atoi(result->value);
                lowmem_memcg_set_threshold(MEMCG_MEMORY, LOWMEM_MEDIUM, value);
-       } else if (!strcmp(result->name, "ThresholdLeave")) {
+       } else if (!strncmp(result->name, "ThresholdLeave", strlen("ThresholdLeave")+1)) {
                int value = atoi(result->value);
                lowmem_memcg_set_leave_threshold(MEMCG_MEMORY, value);
-       } else if (!strcmp(result->name, "ForegroundRatio")) {
+       } else if (!strncmp(result->name, "ForegroundRatio", strlen("ForegroundRatio")+1)) {
                float ratio = atof(result->value);
                memcg_info_set_limit(memcg_tree[MEMCG_FOREGROUND]->info, ratio, totalram);
-       } else if (!strcmp(result->name, "ForegroundUseHierarchy")) {
+       } else if (!strncmp(result->name, "ForegroundUseHierarchy", strlen("ForegroundUseHierarchy")+1)) {
                int use_hierarchy = atoi(result->value);
                memcg_tree[MEMCG_FOREGROUND]->use_hierarchy = use_hierarchy;
-       } else if (!strcmp(result->name, "ForegroundNumCgroups")) {
+       } else if (!strncmp(result->name, "ForegroundNumCgroups", strlen("ForegroundNumCgroups")+1)) {
                int num_cgroups = atoi(result->value);
-               memcg_add_cgroups(memcg_tree[MEMCG_FOREGROUND],
-                       num_cgroups);
+               if (num_cgroups > 0)
+                       memcg_add_cgroups(memcg_tree[MEMCG_FOREGROUND], num_cgroups);
                memcg_show(memcg_tree[MEMCG_FOREGROUND]);
-       } else if (!strcmp(result->name, "NumMaxVictims")) {
+       } else if (!strncmp(result->name, "NumMaxVictims", strlen("NumMaxVictims")+1)) {
                int value = atoi(result->value);
                num_max_victims = value;
-       } else if (!strcmp(result->name, "ProactiveThreshold")) {
+       } else if (!strncmp(result->name, "ProactiveThreshold", strlen("ProactiveThreshold")+1)) {
                int value = atoi(result->value);
                proactive_threshold = value;
-       } else if (!strcmp(result->name, "ProactiveLeave")) {
+       } else if (!strncmp(result->name, "ProactiveLeave", strlen("ProactiveLeave")+1)) {
                int value = atoi(result->value);
                proactive_leave = value;
-       } else if (!strcmp(result->name, "DynamicThreshold")) {
+       } else if (!strncmp(result->name, "DynamicThreshold", strlen("DynamicThreshold")+1)) {
                int value = atoi(result->value);
                dynamic_threshold_min = value;
        }
index bfe5e4527b2328de8ee4c1f708de37059ac3b25e..fe386c9cdb9ce93d0807aeeb9aaae7f9be542d54 100644 (file)
@@ -253,10 +253,12 @@ static void get_memcg_info(void)
 {
        char buf[PATH_MAX];
        _cleanup_closedir_ DIR *pdir = NULL;
-       struct dirent *entry;
+       struct dirent entry;
+       struct dirent *result;
        struct stat path_stat;
        long usage_swap;
        unsigned long usage, usage_with_swap;
+       int ret;
 
        _I("====================================================================");
        _I("MEMORY CGROUPS USAGE INFO");
@@ -267,15 +269,15 @@ static void get_memcg_info(void)
                return;
        }
 
-       while ((entry = readdir(pdir)) != NULL) {
-               sprintf(buf, "%s/%s", MEMCG_PATH, entry->d_name);
+       while (!(ret = readdir_r(pdir, &entry, &result)) && result != NULL) {
+               snprintf(buf, sizeof(buf), "%s/%s", MEMCG_PATH, entry.d_name);
                /* If can't stat then ignore */
                if (stat(buf, &path_stat) != 0)
                        continue;
 
                /* If it's not directory or it's parent path then ignore */
                if (!(S_ISDIR(path_stat.st_mode) &&
-                       strcmp(entry->d_name, "..")))
+                       strncmp(entry.d_name, "..", 3)))
                        continue;
 
                usage = get_memcg_usage(buf, false);
@@ -286,7 +288,7 @@ static void get_memcg_info(void)
                        usage_swap = 0;
 
                /* Case of root cgroup in hierarchy */
-               if (!strcmp(entry->d_name, "."))
+               if (!strncmp(entry.d_name, ".", 2))
                        _I("%13s Mem %3ld MB (%6ld kB), Mem+Swap %3ld MB (%6ld kB), Swap %3ld MB (%6ld kB) \n",
                                MEMCG_PATH, BYTE_TO_MBYTE(usage),
                                BYTE_TO_KBYTE(usage),
@@ -296,7 +298,7 @@ static void get_memcg_info(void)
                                BYTE_TO_KBYTE(usage_swap));
                else
                        _I("memcg: %13s  Mem %3ld MB (%6ld kB), Mem+Swap %3ld MB (%6ld kB), Swap %3ld MB (%6ld kB)",
-                               entry->d_name, BYTE_TO_MBYTE(usage),
+                               entry.d_name, BYTE_TO_MBYTE(usage),
                                BYTE_TO_KBYTE(usage),
                                BYTE_TO_MBYTE(usage_with_swap),
                                BYTE_TO_KBYTE(usage_with_swap),
@@ -663,7 +665,7 @@ static int show_map_all_new(void)
                        continue;
 
                base_name = basename(cmdline);
-               if (base_name && !strcmp(base_name, "mem-stress"))
+               if (base_name && !strncmp(base_name, "mem-stress", strlen("mem-stress")+1))
                        continue;
 
                r = smaps_get(pid, &maps, SMAPS_MASK_DEFAULT);
index 64b9c9fdafdbbf60586122d9bcb3d4360eac694d..58d013f99fae6175117b9e6e6dda956fb19e9fa1 100644 (file)
@@ -71,12 +71,12 @@ static gint compare_classid(gconstpointer a, gconstpointer b,
        if (ret)
                return ret;
 
-       ret = strcmp(a_key->ifname, b_key->ifname);
+       ret = strncmp(a_key->ifname, b_key->ifname, strlen(b_key->ifname)+1);
        if (ret)
                return ret;
 
        return (a_key->imsi && b_key->imsi) ?
-               strcmp(a_key->imsi, b_key->imsi) : 0;
+               strncmp(a_key->imsi, b_key->imsi, strlen(b_key->imsi)+1) : 0;
 }
 
 struct application_stat_tree *create_app_stat_tree(void)
index 2452f4979f9749cb6c6d972fc41c5b5d2ae80c54..e938a0b9927ce09e94ad7d8df9f6c009c6c0f7a2 100644 (file)
@@ -924,7 +924,7 @@ static void deserialize_rule(DBusMessage *msg, data_usage_selection_rule *rule,
                        err.name, err.message);
        }
 
-       if (app_id && !strcmp(*app_id, null_str))
+       if (app_id && !strncmp(*app_id, null_str, strlen(null_str)+1))
                *app_id = NULL;
        dbus_error_free(&err);
 }
@@ -980,10 +980,10 @@ static inline char *get_public_appid(const uint32_t classid)
        /* following value for ALL is suitable for using in statistics
           what's why it's not in get_app_id_by_classid */
        if (classid == RESOURCED_ALL_APP_CLASSID)
-               return strdup(RESOURCED_ALL_APP);
+               return strndup(RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP));
 
        appid = get_app_id_by_classid(classid, true);
-       return !appid ? strdup(UNKNOWN_APP) : appid;
+       return !appid ? strndup(UNKNOWN_APP, strlen(UNKNOWN_APP)) : appid;
 }
 
 static bool need_flush_immediatelly(sig_atomic_t state)
index 5da4dc2e1746b3afa750ef90855f54c2307a2d19..17dd5d2eabad799ac77879d2c3a32d06464bddf8 100644 (file)
@@ -1238,7 +1238,7 @@ static int compare_nfcntr(gconstpointer a, gconstpointer b,
         * assume it's the same as given ifname
         */
        if (strlen(key_a->ifname) && strlen(key_b->ifname))
-               return strcmp(key_a->ifname, key_b->ifname);
+               return strncmp(key_a->ifname, key_b->ifname, strlen(key_b->ifname)+1);
 
        return 0;
 }
@@ -1407,7 +1407,7 @@ static gboolean fill_restriction_list(gpointer key, gpointer value,
 
        gslist_for_each_item(iter, *rst_list) {
                resourced_restriction_info *look_info = (resourced_restriction_info *)iter->data;
-               if (look_info->app_id && !strcmp(look_info->app_id, app_id) &&
+               if (look_info->app_id && !strncmp(look_info->app_id, app_id, strlen(appid)+1) &&
                    look_info->iftype == nf_key->iftype &&
                    look_info->quota_id == nf_value->quota_id &&
                    look_info->roaming == nf_value->roaming) {
index c5c2663d6d656643b8f903b667e572b7ee3b69e1..3ed548655f14bbda705106dfe1ccb80c0c478318 100644 (file)
@@ -210,7 +210,7 @@ static gint compare_quota_key(gconstpointer a, gconstpointer b,
         * per sim, and only afterward by appid */
 
        if (key1->imsi_hash && key2->imsi_hash)
-               ret = strcmp(key1->imsi_hash, key2->imsi_hash);
+               ret = strncmp(key1->imsi_hash, key2->imsi_hash, strlen(key2->imsi_hash)+1);
        else if (!key1->imsi_hash || !key2->imsi_hash) /* in case of one empty another not */
                ret = key1->imsi_hash - key2->imsi_hash;
 
@@ -220,7 +220,7 @@ static gint compare_quota_key(gconstpointer a, gconstpointer b,
        }
 
        if (key1->app_id && key2->app_id)
-               ret = strcmp(key1->app_id, key2->app_id);
+               ret = strncmp(key1->app_id, key2->app_id, strlen(key2->app_id)+1);
        if (ret) {
                _D("quotas different by app_id");
                return ret;
@@ -386,7 +386,7 @@ static resourced_cb_ret data_usage_details_cb(const data_usage_info *info,
 
        /* if imsi is not specified, e.g. for WiFi
         * need additional check*/
-       if (info->imsi && context->imsi && strcmp(context->imsi, info->imsi))
+       if (info->imsi && context->imsi && strncmp(context->imsi, info->imsi, strlen(info->imsi)+1))
                return RESOURCED_CONTINUE;
 
        context->sent_used_quota += info->cnt.outgoing_bytes;
@@ -501,7 +501,7 @@ static void set_effective_quota(const char *app_id,
        const time_t cur_time = time(0);
        char buf[30];
 
-       app_id = !strcmp(app_id, RESOURCED_ALL_APP) ? 0: app_id;
+       app_id = !strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) ? 0: app_id;
 
        if (cur_time < start_time) {
                _D("No need to update effective quota!");
@@ -822,7 +822,7 @@ static bool skip_quota(struct quota_key *key_quota, struct quota *app_quota,
                return true;
        }
 
-       if (!strcmp(key_quota->app_id, TETHERING_APP_NAME) &&
+       if (!strncmp(key_quota->app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1) &&
            (send_delta > 0 || rcv_delta > 0)) {
                _D("tethering");
                /* in the case of tethering we send
@@ -954,7 +954,7 @@ struct update_all_arg
 static inline bool check_imsi_hash(const char *hash_a, const char *hash_b)
 {
        if (hash_a && hash_b)
-               return !strcmp(hash_a,  hash_b);
+               return !strncmp(hash_a, hash_b, strlen(hash_b)+1);
        return hash_a == hash_b; /* both null */
 }
 
@@ -990,7 +990,7 @@ static gboolean update_pseudo_app_entry(gpointer key,
        _D("app stat ground %d", arg->app_stat->ground);
 #endif
        /* handle case for network interfaces*/
-       if ((!strcmp(qkey->app_id, RESOURCED_ALL_APP) &&
+       if ((!strncmp(qkey->app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) &&
             (qkey->iftype == RESOURCED_IFACE_UNKNOWN ||
              qkey->iftype == RESOURCED_IFACE_ALL ||
              qkey->iftype == arg->iftype) &&
@@ -998,7 +998,7 @@ static gboolean update_pseudo_app_entry(gpointer key,
             (qkey->roaming == RESOURCED_ROAMING_UNKNOWN ||
              qkey->roaming == arg->app_stat->is_roaming) &&
              check_ground_state(qkey, arg->app_stat)) ||
-           !strcmp(qkey->app_id, TETHERING_APP_NAME))
+           !strncmp(qkey->app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1))
        {
                /* update it */
                total_quota->sent_used_quota += arg->app_stat->delta_snd;
index a37e79b3387b8775c79bbd5c8fb44c1385688d16..6f238bcf9df9f047918d14b4f70f3bf9f8fe19e9 100644 (file)
@@ -120,7 +120,7 @@ static int extract_group_id(const struct rtattr *rt_na, const char *group_name,
 
        name = RTA_DATA(multicast_group_family[CTRL_ATTR_MCAST_GRP_NAME]);
 
-       if (strcmp(name, group_name))
+       if (strncmp(name, group_name, strlen(group_name)+1))
                return -EINVAL;
 
        *group_id = *((__u32 *)RTA_DATA(
index 2de873fc86a0f5c1c90a9d017664cf2ffaa5eba3..51badf91ddd04edfcf4d0543fe4c9fde5c0f9181 100644 (file)
@@ -114,7 +114,7 @@ static void keep_ifname(GSList **ifnames_list, char *ifname, int iftype)
 
        gslist_for_each_item(iter, *ifnames_list) {
                struct iface_status *cur = (struct iface_status *)iter->data;
-               if (cur->iftype == iftype && !strcmp(cur->ifname, ifname)) {
+               if (cur->iftype == iftype && !strncmp(cur->ifname, ifname, strlen(ifname)+1)) {
                        cur->active = true;
                        found = true;
                }
@@ -205,7 +205,7 @@ static resourced_iface_type read_iftype(const char *iface)
                        break;
                key_buffer = strtok_r(buffer, UEVENT_DELIM, &saveptr);
                value_buffer = strtok_r(NULL, UEVENT_DELIM, &saveptr);
-               if (key_buffer && strcmp(key_buffer, DEVTYPE_KEY) != 0)
+               if (key_buffer && strncmp(key_buffer, DEVTYPE_KEY, strlen(DEVTYPE_KEY)+1) != 0)
                        continue;
                ret = convert_iftype(value_buffer);
                break;
@@ -251,7 +251,7 @@ int fill_ifaces_relation(struct parse_result *result,
                                void UNUSED *user_data)
 {
        struct iface_relation *relation;
-       if (strcmp(result->section, IFACES_TYPE_SECTION))
+       if (strncmp(result->section, IFACES_TYPE_SECTION, strlen(IFACES_TYPE_SECTION)+1))
                return RESOURCED_ERROR_NONE;
 
        relation = (struct iface_relation *)malloc(sizeof(struct iface_relation));
@@ -323,18 +323,18 @@ resourced_iface_type convert_iftype(const char *buffer)
                return RESOURCED_IFACE_UNKNOWN;
        }
 
-       if (strcmp(buffer, DATACALL_VALUE) == 0)
+       if (strncmp(buffer, DATACALL_VALUE, strlen(DATACALL_VALUE)+1) == 0)
                return RESOURCED_IFACE_DATACALL;
 
-       if (strcmp(buffer, WIFI_VALUE) == 0)
+       if (strncmp(buffer, WIFI_VALUE, strlen(WIFI_VALUE)+1) == 0)
                return RESOURCED_IFACE_WIFI;
 
-       if (strcmp(buffer, BLUETOOTH_VALUE) == 0)
+       if (strncmp(buffer, BLUETOOTH_VALUE, strlen(BLUETOOTH_VALUE)+1) == 0)
                return RESOURCED_IFACE_BLUETOOTH;
 
-       if (strcmp(buffer, WIRED_VALUE) == 0)
+       if (strncmp(buffer, WIRED_VALUE, strlen(WIRED_VALUE)+1) == 0)
                return RESOURCED_IFACE_WIRED;
-       if (strcmp(buffer, ALL_NET_IFACE_VALUE) == 0)
+       if (strncmp(buffer, ALL_NET_IFACE_VALUE, strlen(ALL_NET_IFACE_VALUE)+1) == 0)
                return RESOURCED_IFACE_ALL;
        return RESOURCED_IFACE_UNKNOWN;
 }
@@ -377,7 +377,7 @@ resourced_iface_type get_iftype_by_name(char *name)
 
        gslist_for_each_item(iter, ifnames) {
                struct iface_status *value = (struct iface_status *)iter->data;
-               if (!strcmp(value->ifname, name))
+               if (!strncmp(value->ifname, name, strlen(name)+1))
                        return value->iftype;
        }
 
index 0916612fe2021f3432423aac4c72fd1f1599b969..9bfe49708f1da80d4da35481181d2e7e953043ab 100644 (file)
@@ -162,7 +162,7 @@ static struct ipt_chain *ipt_select_chain(struct ipt_context *iptc,
        }
        for (iter = iptc->chains; iter; iter = iter->next) {
                struct ipt_chain *chain = iter->data;
-               if (!strcmp(chain->name, chain_name)) {
+               if (!strncmp(chain->name, chain_name, strlen(chain_name)+1)) {
                        found_chain = chain;
                        break;
                }
@@ -172,7 +172,7 @@ static struct ipt_chain *ipt_select_chain(struct ipt_context *iptc,
                found_chain = (struct ipt_chain *)malloc(sizeof(struct ipt_chain));
                ret_value_msg_if(found_chain == NULL, NULL, "Not enough memory!");
                memset(found_chain, 0, sizeof(struct ipt_chain));
-               strcpy(found_chain->name, chain_name);
+               strncpy(found_chain->name, sizeof(found_chain->name) - 1, chain_name);
                found_chain->hooknum = hook_number;
                iptc->chains = g_list_append(iptc->chains,
                                found_chain);
@@ -200,7 +200,7 @@ static void recalculate_verdict(struct ipt_chain *chain,
                ret_msg_if(ipt_entry->jump == NULL, "Need to find jump destination.");
 
                memset(t->target.u.user.name, 0, XT_EXTENSION_MAXNAMELEN);
-               strcpy(t->target.u.user.name, XT_STANDARD_TARGET);
+               strncpy(t->target.u.user.name, XT_STANDARD_TARGET, XT_EXTENSION_MAXNAMELEN - 1);
                /*
                 * Jumps can only happen in builtin chains, so we
                 * can safely assume that they always have a header
@@ -396,9 +396,10 @@ static resourced_ret_c ipt_populate_entry(struct ipt_context *iptc,
 
        /* it means not nfacct entry */
        if (nfacct_name)
-               strcpy(e->nfacct_name, nfacct_name);
+               strncpy(e->nfacct_name, nfacct_name, sizeof(e->nfacct_name) - 1);
        else
-               strcpy(e->nfacct_name, "not nfacct entry"); /* for debug purpose only */
+               strncpy(e->nfacct_name, "not nfacct entry", sizeof(e->nfacct_name) - 1); /* for debug purpose only */
+       e->nfacct_name[sizeof(e->nfacct_name) - 1] = 0;
 
        e->verdict_type = verdict_type;
        if (insert_type == IPT_INSERT_APPEND)
@@ -442,7 +443,7 @@ enum ipt_verdict_type reverse_target_type(int offset, struct ipt_entry *e)
 {
        struct xt_standard_target *t = (struct xt_standard_target *)ipt_get_target(e);
 
-       if (!strcmp(t->target.u.user.name, XT_STANDARD_TARGET)) {
+       if (!strncmp(t->target.u.user.name, XT_STANDARD_TARGET, strlen(XT_STANDARD_TARGET)+1)) {
                if (t->target.u.target_size
                    != IPT_ALIGN(sizeof(struct xt_standard_target))) {
                        _E("Mismatch target size for standard target!");
@@ -477,7 +478,7 @@ static inline bool is_last_entry(struct ipt_context *t, struct ipt_entry *e)
 
 static inline bool is_error_target(struct xt_error_target *t)
 {
-       return strcmp(t->target.u.user.name, XT_ERROR_TARGET) == 0;
+       return strncmp(t->target.u.user.name, XT_ERROR_TARGET, strlen(XT_ERROR_TARGET)+1) == 0;
 }
 
 static void clear_user_chain(struct ipt_context *table)
@@ -534,7 +535,7 @@ static resourced_cb_ret populate_entry(struct resourced_ipt_entry_info *info,
                is_auxilary_entry = true;
        } else {
                chain_name = define_chain_name(table, entry_offset, &hook_number);
-               is_auxilary_entry = strcmp(t->target.u.user.name, XT_STANDARD_TARGET) == 0 &&
+               is_auxilary_entry = strncmp(t->target.u.user.name, XT_STANDARD_TARGET, strlen(XT_STANDARD_TARGET)+1) == 0 &&
                        info->entry->target_offset == sizeof(struct ipt_entry) &&
                        info->entry->next_offset == IPTC_ENTRY_STANDARD_TARGET_SIZE &&
                        (hook_number < NF_IP_NUMHOOKS && entry_offset == table->underflow[hook_number]);
@@ -579,7 +580,7 @@ typedef resourced_cb_ret (*iterate_entries_cb)(struct resourced_ipt_entry_info *
 static int find_nfacct_name (const struct xt_entry_match *match,
                        char **found_name)
 {
-       if (match && !strcmp(match->u.user.name, NFACCT_MATCH_NAME)) {
+       if (match && !strncmp(match->u.user.name, NFACCT_MATCH_NAME, strlen(NFACCT_MATCH_NAME)+1)) {
                struct xt_nfacct_match_info *info = (struct xt_nfacct_match_info *)match->data;
                *found_name = info ? info->name: NULL;
                return  1; /* means stop */
@@ -642,6 +643,8 @@ static resourced_ret_c ipt_foreach(struct ipt_context *iptc, iterate_entries_cb
 API resourced_ret_c resourced_ipt_begin(struct ipt_context *iptc)
 {
        int ret;
+       char error_buf[256];
+
        socklen_t s = sizeof(*iptc->info);
        ret_value_msg_if(iptc == NULL, RESOURCED_ERROR_INVALID_PARAMETER,
                        "Please provide iptc handle");
@@ -658,13 +661,13 @@ API resourced_ret_c resourced_ipt_begin(struct ipt_context *iptc)
                }
        }
 
-       strcpy(iptc->info->name, TABLE_NAME);
+       snprintf(iptc->info->name,  sizeof(iptc->info->name), "%s", TABLE_NAME);
        ret = getsockopt(iptc->sock, IPPROTO_IP, IPT_SO_GET_INFO,
                         iptc->info, &s);
 
        if(ret < 0) {
                _E("iptables support missing error %d (%s)", errno,
-                       strerror(errno));
+                       strerror_r(errno, error_buf, sizeof(error_buf)));
                goto release_info;
        }
 
@@ -730,8 +733,11 @@ static resourced_ret_c send_ipt_items(struct ipt_context *iptc,
 {
        int err = setsockopt(iptc->sock, IPPROTO_IP, IPT_SO_SET_REPLACE, r,
                        sizeof(*r) + r->size);
+       char error_buf[256];
+
        ret_value_msg_if(err < 0, RESOURCED_ERROR_FAIL,
-                       "Can't send iptables rules! %s [%d]", strerror(errno),
+                       "Can't send iptables rules! %s [%d]",
+                       strerror_r(errno, error_buf, sizeof(error_buf)),
                        errno);
 
        return RESOURCED_ERROR_NONE;
@@ -974,18 +980,18 @@ static void fill_ipt_entry(struct nfacct_rule *rule, struct ipt_entry *entry)
 
        iface_len = strlen(rule->ifname);
        if (dest_ifname && iface_len) {
-               strcpy(dest_ifname, rule->ifname);
+               snprintf(dest_ifname, IFNAMSIZ, "%s", rule->ifname);
                memset(dest_ifmask, 0xff, iface_len + 1);
        }
 
-       strcpy(match->u.user.name, CGROUP_MATCH_NAME);
+       snprintf(match->u.user.name, sizeof(match->u.user.name), "%s", CGROUP_MATCH_NAME);
        match->u.user.match_size = XT_CGROUP_MATCH_SIZE;
        memcpy(match->data, &cgroup_info, sizeof(struct xt_cgroup_info));
        memcpy(entry->elems, match,  XT_CGROUP_MATCH_SIZE);
 
        memset(&nfacct_info, 0, sizeof(struct xt_nfacct_match_info));
-       strcpy(nfacct_info.name, rule->name);
-       strcpy(match->u.user.name, NFACCT_MATCH_NAME);
+       snprintf(nfacct_info.name, sizeof(nfacct_info.name), "%s", rule->name);
+       snprintf(match->u.user.name, sizeof(match->u.user.name), "%s", NFACCT_MATCH_NAME);
        match->u.user.match_size = XT_NFACCT_MATCH_SIZE;
        memcpy(match->data, &nfacct_info, sizeof(struct xt_nfacct_match_info));
 
@@ -1029,7 +1035,7 @@ static bool check_existence(struct nfacct_rule *rule, struct ipt_context *iptc)
                chain = cur_chain->data;
                for (cur_rule = chain->rules; cur_rule; cur_rule = cur_rule->next) {
                        e = cur_rule->data;
-                       if (strcmp (e->nfacct_name, rule->name) == 0)
+                       if (strncmp(e->nfacct_name, rule->name, strlen(rule->name)+1) == 0)
                                return true;
                }
        }
@@ -1104,7 +1110,7 @@ API resourced_ret_c resourced_ipt_remove(struct nfacct_rule *rule, struct ipt_co
        }
        for (iter = chain->rules; iter; iter = iter->next) {
                e = iter->data;
-               if (!strcmp(e->nfacct_name, rule->name)) {
+               if (!strncmp(e->nfacct_name, rule->name, strlen(rule->name)+1)) {
                        found_entry = e;
                        break;
                }
@@ -1174,7 +1180,7 @@ static void dump_target(struct ipt_entry *entry)
 {
        struct xt_entry_target *target = ipt_get_target(entry);
 
-       if (strcmp(target->u.user.name, IPT_STANDARD_TARGET) == 0) {
+       if (strncmp(target->u.user.name, IPT_STANDARD_TARGET, strlen(IPT_STANDARD_TARGET)+1) == 0) {
                struct xt_standard_target *t;
 
                t = (struct xt_standard_target *)target;
@@ -1214,7 +1220,7 @@ static resourced_cb_ret dump_entry(struct resourced_ipt_entry_info *info, void *
        _D("entry %p next_offset %d ", info->entry,
                        info->entry->next_offset);
 
-       if (!strcmp(target->u.user.name, IPT_ERROR_TARGET)) {
+       if (!strncmp(target->u.user.name, IPT_ERROR_TARGET, strlen(IPT_ERROR_TARGET)+1)) {
                _D("\tUSER CHAIN (%s) match %p  target %p",
                        target->data, info->entry->elems,
                        (char *)info->entry + info->entry->target_offset);
index 189bd334dba095ed02b16b21704ebccfdfa42df8..e122c7ef65607faa844bc62eb11aca8c166ae446 100644 (file)
@@ -168,13 +168,13 @@ u_int32_t get_classid_by_app_id(const char *app_id, int create)
                return RESOURCED_UNKNOWN_CLASSID;
        }
 
-       if (!strcmp(app_id, RESOURCED_ALL_APP))
+       if (!strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1))
                return RESOURCED_ALL_APP_CLASSID;
 
-       if (!strcmp(app_id, TETHERING_APP_NAME))
+       if (!strncmp(app_id, TETHERING_APP_NAME, strlen(TETHERING_APP_NAME)+1))
                return RESOURCED_TETHERING_APP_CLASSID;
 
-       if (!strcmp(app_id, RESOURCED_BACKGROUND_APP_NAME))
+       if (!strncmp(app_id, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1))
                return RESOURCED_BACKGROUND_APP_CLASSID;
 
        /* just read */
@@ -359,7 +359,7 @@ API resourced_ret_c make_net_cls_cgroup_with_pid(const int pid, const char *pkg_
                return RESOURCED_ERROR_INVALID_PARAMETER;
        }
 
-       if (!strcmp(pkg_name, RESOURCED_BACKGROUND_APP_NAME))
+       if (!strncmp(pkg_name, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1))
                ret = make_net_cls_cgroup(pkg_name, RESOURCED_BACKGROUND_APP_CLASSID);
        else
                ret = make_net_cls_cgroup(pkg_name, RESOURCED_UNKNOWN_CLASSID);
index 991a424e9b06772336fb114fec835610c7c2ba70..ff0145189c25935b5ab96f143130b33da6f2e30c 100644 (file)
@@ -44,10 +44,10 @@ static int fill_general_opt(struct parse_result *result,
                void *user_data)
 {
        struct net_counter_opts *opts = (struct net_counter_opts *)user_data;
-       if (strcmp(result->section, GENERAL_SECTION))
+       if (strncmp(result->section, GENERAL_SECTION, strlen(GENERAL_SECTION)+1))
                return RESOURCED_ERROR_NONE;
 
-       if (strcmp(result->name, NET_UPDATE_PERIOD_NAME) == 0) {
+       if (strncmp(result->name, NET_UPDATE_PERIOD_NAME, strlen(NET_UPDATE_PERIOD_NAME)+1) == 0) {
                opts->update_period = atoi(result->value);
                if (opts->update_period == 0) {
                        _D("not valid value %s for %s key", result->value,
@@ -58,7 +58,7 @@ static int fill_general_opt(struct parse_result *result,
                        _D("update period is %d", opts->update_period);
        }
 
-       if (strcmp(result->name, NET_FLUSH_PERIOD_NAME) == 0) {
+       if (strncmp(result->name, NET_FLUSH_PERIOD_NAME, strlen(NET_FLUSH_PERIOD_NAME)+1) == 0) {
                opts->flush_period = atoi(result->value);
                if (opts->flush_period == 0) {
                        _D("not valid value %s for %s key", result->value,
index a3f2c381435d408cfd510b739cfa7eaeb1063f6d..37b359ba78459eedabd696941f41031d7ee31086 100644 (file)
@@ -90,7 +90,7 @@ static resourced_cb_ret _restriction_iter(
           info->app_id, context->ifindex);
 #ifdef MULTISIM_FEATURE_ENABLED
        const char *imsi_hash = get_imsi_hash(get_current_modem_imsi());
-       if (imsi_hash && info->imsi  && !strcmp(imsi_hash, info->imsi)) {
+       if (imsi_hash && info->imsi  && !strncmp(imsi_hash, info->imsi, strlen(info->imsi)+1)) {
                gpointer data = _create_reset_restriction(info, context->ifindex);
                if (data)
                        context->restrictions = g_list_prepend(context->restrictions,
@@ -132,7 +132,7 @@ static bool check_current_imsi_for_restriction(resourced_iface_type iftype,
                const char *imsi_hash = get_imsi_hash(get_current_modem_imsi());
                _SD("current imsi %s", imsi_hash);
                _SD("restrictions imsi %s", du_quota.imsi);
-               return imsi_hash && strcmp(du_quota.imsi, imsi_hash);
+               return imsi_hash && strncmp(du_quota.imsi, imsi_hash, strlen(imsi_hash)+1);
        }
        return false;
 }
index 3140caf28ba847f49aaa5c68885d47aa784ffdbd..456dcc2ab295aca64ad784c6e45a6c3b0f470bd7 100644 (file)
@@ -355,7 +355,7 @@ resourced_ret_c process_kernel_restriction(
 static bool check_background_app(const char *app_id, const resourced_state_t state)
 {
        if (state == RESOURCED_STATE_BACKGROUND &&
-           !strcmp(app_id, RESOURCED_BACKGROUND_APP_NAME)) {
+           !strncmp(app_id, RESOURCED_BACKGROUND_APP_NAME, strlen(RESOURCED_BACKGROUND_APP_NAME)+1)) {
                return TRUE;
        }
        return FALSE;
@@ -383,7 +383,7 @@ resourced_ret_c proc_keep_restriction(
                app_classid = get_classid_by_app_id(app_id, rst_type != RST_UNSET);
        if (!skip_kernel_op) {
                imsi_hash = get_imsi_hash(get_current_modem_imsi());
-               if (imsi_hash && rst->imsi && !strcmp(imsi_hash, rst->imsi)) {
+               if (imsi_hash && rst->imsi && !strncmp(imsi_hash, rst->imsi, strlen(rst->imsi)+1)) {
                        ret = process_kernel_restriction(app_classid, rst, rst_type, quota_id);
                        if (ret != RESOURCED_ERROR_NONE)
                            _E("Can't keep restriction. only update the DB");
@@ -397,7 +397,7 @@ resourced_ret_c proc_keep_restriction(
            "imsi %s, rs_type %d\n", app_id, app_classid,
            store_iftype, rst_state, rst_type, rst->imsi, rst->rs_type);
 #endif
-       if (!strcmp(app_id, RESOURCED_ALL_APP) &&
+       if (!strncmp(app_id, RESOURCED_ALL_APP, strlen(RESOURCED_ALL_APP)+1) &&
                rst->iftype == RESOURCED_IFACE_ALL)
                process_net_block_state(rst_type);
 
index a054eaa9eb97f4f98a7f4c4644a7cd81b1320513..5758acc60180944989639d033ffcd6abc697ffca 100644 (file)
@@ -453,7 +453,7 @@ static void edbus_telephony_changed(void *data, DBusMessage *msg)
 
                dbus_message_iter_get_basic (&prop, &property);
 
-               if (strcmp(property, DBUS_TELEPHONY_ROAMING_STATUS) == 0) {
+               if (strncmp(property, DBUS_TELEPHONY_ROAMING_STATUS, strlen(DBUS_TELEPHONY_ROAMING_STATUS)+1) == 0) {
                        dbus_message_iter_next(&prop); /* it's variant here, expand it */
                        dbus_message_iter_recurse(&prop, &bool_iter);
                        ret_msg_if (dbus_message_iter_get_arg_type(&bool_iter) != DBUS_TYPE_BOOLEAN,
@@ -462,7 +462,7 @@ static void edbus_telephony_changed(void *data, DBusMessage *msg)
                        dbus_message_iter_get_basic (&bool_iter, &modem->roaming);
                        _D("Roaming state for modem %s has changed", modem->name);
                        _D("roaming state now is %d", modem->roaming);
-               } else if (strcmp(property, DBUS_TELEPHONY_SERVICE_TYPE) == 0) {
+               } else if (strncmp(property, DBUS_TELEPHONY_SERVICE_TYPE, strlen(DBUS_TELEPHONY_SERVICE_TYPE)+1) == 0) {
                        dbus_message_iter_next(&prop); /* it's variant here, expand it */
                        dbus_message_iter_recurse(&prop, &bool_iter);
                        ret_msg_if (dbus_message_iter_get_arg_type(&bool_iter) != DBUS_TYPE_INT32,
@@ -603,7 +603,7 @@ char *get_imsi_hash(char *imsi)
                struct modem_state *modem = (struct modem_state *)iter->data;
                if (modem->imsi == NULL)
                        continue;
-               if(!strcmp(imsi, modem->imsi))
+               if(!strncmp(imsi, modem->imsi, strlen(modem->imsi)+1))
                        return modem->imsi_hash;
        }
        return NULL;
@@ -629,7 +629,7 @@ bool check_event_in_current_modem(const char *imsi_hash,
        /* if we don't have current_imsi_hash
         * do everything as before */
        return (current_imsi_hash && imsi_hash) ?
-                       strcmp(imsi_hash, current_imsi_hash) : false;
+                       strncmp(imsi_hash, current_imsi_hash, strlen(current_imsi_hash)+1) : false;
 }
 
 static void modem_free(gpointer data)
index c2d5aa6176527cc83493df3155ac3dfdbcece7a1..6aa9433906c2be8293d2fd318d387ba784b2a208 100644 (file)
@@ -91,17 +91,17 @@ static int load_appusage_config(struct parse_result *result, void *user_data)
        if(!result)
                return -EINVAL;
 
-       if (strcmp(result->section, APPUSAGE_CONF_SECTION))
+       if (strncmp(result->section, APPUSAGE_CONF_SECTION, strlen(APPUSAGE_CONF_SECTION)+1))
                return RESOURCED_ERROR_NO_DATA;
 
-       if (!strcmp(result->name, "APPUSAGE")) {
-               if (!strcmp(result->value, "OFF"))
+       if (!strncmp(result->name, "APPUSAGE", strlen("APPUSAGE")+1)) {
+               if (!strncmp(result->value, "OFF", 4))
                        return RESOURCED_ERROR_UNINITIALIZED;
 
                appusage_favorite_htab = g_hash_table_new_full(g_str_hash,
                                g_str_equal, free_key, NULL);
 
-       } else if (!strcmp(result->name, "PREDEFINE")) {
+       } else if (!strncmp(result->name, "PREDEFINE", strlen("PREDEFINE")+1)) {
                g_hash_table_insert(appusage_favorite_htab,
                                g_strndup(result->value, strlen(result->value)), GINT_TO_POINTER(1));
        }
index 527641d273d1e7955f22c9d4b381f4291fd05f13..ec2ae67a619a03173039c53ab194e05258394709 100644 (file)
@@ -100,6 +100,10 @@ static void *resourced_proc_info_func(void *data)
 
                pid = atoi(msg->argv[0]);
                send_len = atoi(msg->argv[1]);
+               if (pid < 0 || send_len < 0) {
+                       _E("invalid parameters");
+                       goto end;
+               }
                send_buffer = calloc(1, send_len);
                if (send_buffer == NULL) {
                        _E("Not enough memory");
index 984c815b3d7664680ab10e566038bddd5df31036..f1d7f0c4b985d2c26ed1ac799b05b4973ee4bdae 100644 (file)
@@ -91,6 +91,7 @@ static DBusMessage *edbus_get_meminfo(E_DBus_Object *obj, DBusMessage *msg)
        DBusMessage *reply;
        struct meminfo mi;
        int r;
+       char error_buf[256];
 
        reply = dbus_message_new_method_return(msg);
 
@@ -102,7 +103,8 @@ static DBusMessage *edbus_get_meminfo(E_DBus_Object *obj, DBusMessage *msg)
                             MEMINFO_MASK_SWAP_TOTAL |
                             MEMINFO_MASK_SWAP_FREE);
        if (r < 0) {
-               _E("Failed to get meminfo: %s", strerror(-r));
+               _E("Failed to get meminfo: %s",
+                               strerror_r(-r, error_buf, sizeof(error_buf)));
                return reply;
        }
 
@@ -186,9 +188,9 @@ static void proc_dbus_active_signal_handler(void *data, DBusMessage *msg)
                return;
        }
 
-       if (!strcmp(str, "active"))
+       if (!strncmp(str, "active", strlen("active")+1))
                type = PROC_CGROUP_SET_ACTIVE;
-       else if (!strcmp(str, "inactive"))
+       else if (!strncmp(str, "inactive", strlen("inactive")+1))
                type = PROC_CGROUP_SET_INACTIVE;
        else
                return;
index 3bbfcc70196526e78de4e9f3b7725da2945612c9..cf366526bf6555c32e9df42514144fed6fd49a9c 100644 (file)
@@ -89,7 +89,7 @@ static inline char *recv_str(int fd)
        if (len <= 0)
                return NULL;
 
-       if (len >= INT_MAX) {
+       if (len >= INT_MAX - 1) {
                _E("size is over INT_MAX");
                return NULL;
        }
@@ -136,6 +136,7 @@ int read_message(int fd, struct resourced_noti *msg)
        ret_value_if(msg->type <= 0, errno);
        msg->argc = recv_int(fd);
        ret_value_if(msg->argc <= 0, errno);
+       ret_value_if(msg->argc > NOTI_MAXARG, RESOURCED_ERROR_FAIL);
 
        for (i = 0; i < msg->argc; ++i) {
                msg->argv[i] = recv_str(fd);
@@ -160,6 +161,9 @@ void free_message(struct resourced_noti *msg)
 {
        int i;
 
+       if (!msg)
+               return;
+
        for (i = 0; i < msg->argc; i++)
                internal_free(msg->argv[i]);
        free(msg);
@@ -214,11 +218,15 @@ static Eina_Bool proc_noti_cb(void *data, Ecore_Fd_Handler *fd_handler)
        struct timeval tv = { 1, 0 };   /* 1 sec */
 
        if (!ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)) {
-               _E("ecore_main_fd_handler_active_get error , return\n");
+               _E("ecore_main_fd_handler_active_get error , return");
                return ECORE_CALLBACK_CANCEL;
        }
 
        fd = ecore_main_fd_handler_fd_get(fd_handler);
+       if (fd < 0) {
+               _E("ecore_main_fd_handler_fd_get failed");
+               return ECORE_CALLBACK_CANCEL;
+       }
 
        msg = calloc(1, sizeof(struct resourced_noti));
        if (msg == NULL) {
@@ -260,6 +268,12 @@ static Eina_Bool proc_noti_cb(void *data, Ecore_Fd_Handler *fd_handler)
        if (msg->type >= PROC_CGROUP_GET_CMDLINE) {
                pid = atoi(msg->argv[0]);
                send_len = atoi(msg->argv[1]);
+               if (pid <= 0 || send_len <= 0) {
+                       _E("invalid parameters");
+                       ret = -EINVAL;
+                       safe_write_int(client_sockfd, msg->type, &ret);
+                       goto proc_noti_renew;
+               }
                send_buffer = calloc(1, send_len);
                if (!send_buffer) {
                        _E("not enough memory for calloc");
index 1f536a01c62f33e5434bc1232a7c15aa81ad7501..4f2ad3f2bcec57cf2d2fda0bce1f3672257fe397 100644 (file)
@@ -159,6 +159,8 @@ static bool get_proc_cmdline(pid_t pid, char *cmdline)
                fclose(fp);
                return false;
        }
+       buf[sizeof(buf)-1] = 0;
+
        fclose(fp);
 
 
index 8a2ceabc24a3194ae011bd779162b77ad05c05ad..e90732f5c63796063479639540adebda3bec6ee8 100644 (file)
@@ -160,6 +160,7 @@ static pid_t swap_change_state(enum swap_state state)
        int status;
        pid_t child_pid;
        pid_t pid = fork();
+       char error_buf[256];
 
        if (pid < 0) {
                _E("failed to fork");
@@ -180,7 +181,8 @@ static pid_t swap_change_state(enum swap_state state)
        /* parent */
        child_pid = waitpid(pid, &status, 0);
        if (child_pid < 0) {
-               _E("can't wait for a pid %d %d %s", pid, status, strerror(errno));
+               _E("can't wait for a pid %d %d %s", pid, status,
+                               strerror_r(errno, error_buf, sizeof(error_buf)));
                return child_pid;
        }
 
@@ -854,29 +856,29 @@ static int load_swap_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (strcmp(result->section, SWAP_CONTROL_SECTION))
+       if (strncmp(result->section, SWAP_CONTROL_SECTION, strlen(SWAP_CONTROL_SECTION)+1))
                return RESOURCED_ERROR_NO_DATA;
 
-       if (!strcmp(result->name, SWAP_CONF_STREAMS)) {
+       if (!strncmp(result->name, SWAP_CONF_STREAMS, strlen(SWAP_CONF_STREAMS)+1)) {
                int value = atoi(result->value);
                if (value > 0) {
                        swap_control.max_comp_streams = value;
                        _D("max_comp_streams of swap_control is %d",
                                swap_control.max_comp_streams);
                }
-       } else if (!strcmp(result->name, SWAP_CONF_ALGORITHM)) {
-               if (!strcmp(result->value, "lzo") ||
-                   !strcmp(result->value, "lz4")) {
+       } else if (!strncmp(result->name, SWAP_CONF_ALGORITHM, strlen(SWAP_CONF_ALGORITHM)+1)) {
+               if (!strncmp(result->value, "lzo", 4) ||
+                   !strncmp(result->value, "lz4", 4)) {
                        strncpy(swap_control.comp_algorithm, result->value,
                                strlen(result->value) + 1);
                        _D("comp_algorithm of swap_control is %s",
                                result->value);
                }
-       } else if (!strcmp(result->name, SWAP_CONF_RATIO)) {
+       } else if (!strncmp(result->name, SWAP_CONF_RATIO, strlen(SWAP_CONF_RATIO)+1)) {
                float ratio = atof(result->value);
                swap_control.ratio = ratio;
                _D("swap disk size ratio is %.2f", swap_control.ratio);
-       } else if (!strncmp(result->name, SWAP_HARD_LIMIT, strlen(SWAP_HARD_LIMIT))) {
+       } else if (!strncmp(result->name, SWAP_HARD_LIMIT, strlen(SWAP_HARD_LIMIT)+1)) {
                limit_value = (int)strtoul(result->value, NULL, 0);
                if (limit_value < 0 || limit_value > 100)
                        _E("Invalid %s value in %s file, setting %f as default percent value",
index b9fd379687002e0cf7793e6ae49f95d467056804..2788e034f0c8f631145f2c7c65c3daa0b73ac5bc 100644 (file)
@@ -190,19 +190,19 @@ static int load_timer_config(struct parse_result *result, void *user_data)
        if (!result)
                return -EINVAL;
 
-       if (!strcmp(result->section, EXCLUDE_CONF_SECTION)) {
-               if (strcmp(result->name, EXCLUDE_CONF_NAME))
+       if (!strncmp(result->section, EXCLUDE_CONF_SECTION, strlen(EXCLUDE_CONF_SECTION)+1)) {
+               if (strncmp(result->name, EXCLUDE_CONF_NAME, strlen(EXCLUDE_CONF_NAME)+1))
                        return RESOURCED_ERROR_NO_DATA;
                pid = find_pid_from_cmdline(result->value);
                if (pid > 0)
                        timer_slack_write(TIMER_EXCLUDE_CGROUP, CGROUP_FILE_NAME, pid);
        } else {
                for (i = 0; i < TIMER_SLACK_MAX; i++) {
-                       if (strcmp(result->section, timer_slack[i].name))
+                       if (strncmp(result->section, timer_slack[i].name, strlen(timer_slack[i].name)+1))
                                continue;
-                       if (!strcmp(result->name, "timer_mode"))
+                       if (!strncmp(result->name, "timer_mode", strlen("timer_mode")+1))
                                timer_slack[i].timer_mode = atoi(result->value);
-                       if (!strcmp(result->name, "min_slack_ns"))
+                       if (!strncmp(result->name, "min_slack_ns", strlen("min_slack_ns")+1))
                                timer_slack[i].slack_value = atoi(result->value);
                }
        }
index bff2839ad50e5697d8f75cd99f5e042327d6474e..b281ecd59bef307a985db22e8df1ed0e3c0f908c 100644 (file)
@@ -69,17 +69,17 @@ static resourced_ret_c convert_roaming(const char *str,
        if (!str)
                return RESOURCED_ERROR_INVALID_PARAMETER;
 
-       if (!strcmp(optarg, "enabled")) {
+       if (!strncmp(optarg, "enabled", strlen("enabled")+1)) {
                *roaming = RESOURCED_ROAMING_ENABLE;
                return RESOURCED_ERROR_NONE;
        }
 
-       if (!strcmp(optarg, "disabled")) {
+       if (!strncmp(optarg, "disabled", strlen("disabled")+1)) {
                *roaming = RESOURCED_ROAMING_DISABLE;
                return RESOURCED_ERROR_NONE;
        }
 
-       if (!strcmp(optarg, "unknown")) {
+       if (!strncmp(optarg, "unknown", strlen("unknown")+1)) {
                *roaming = RESOURCED_ROAMING_UNKNOWN;
                return RESOURCED_ERROR_NONE;
        }
@@ -307,9 +307,9 @@ static enum run_rsml_cmd parse_cmd(int argc, char **argv,
                                printf("options option requeres an argument.");
                                exit(EXIT_FAILURE);
                        }
-                       if (optarg && strcmp(optarg, "set") == 0)
+                       if (optarg && strncmp(optarg, "set", 4) == 0)
                                cmd = RESOURCED_SET_OPTIONS;
-                       else if (optarg && strcmp(optarg, "get") == 0)
+                       else if (optarg && strncmp(optarg, "get", 4) == 0)
                                cmd = RESOURCED_GET_OPTIONS;
                        break;
                case 'q':
index 80e262f29d3e51ce7177d5882acf7c026039eb76..128edb4b8d31e26875de3a1c6cea7e4262b27810 100644 (file)
@@ -42,6 +42,7 @@ int main(int argc, char *argv[])
        struct ipt_context iptc = {0};
        struct nfacct_rule rule;
        enum iptables_test_cmd cmd;
+       char *saveptr;
 
        if (argc <= 2) {
                puts(" Usage: \n");
@@ -49,11 +50,11 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
-       if (strcmp(argv[1], "i") == 0) {
+       if (strncmp(argv[1], "i", 2) == 0) {
                cmd = CMD_INSERT;
-       } else if (strcmp(argv[1], "a") == 0) {
+       } else if (strncmp(argv[1], "a", 2) == 0) {
                cmd = CMD_APPEND;
-       } else if (strcmp(argv[1], "d") == 0) {
+       } else if (strncmp(argv[1], "d", 2) == 0) {
                cmd = CMD_DELETE;
        } else {
                printf("Unknown command %s", argv[1]);
@@ -61,7 +62,7 @@ int main(int argc, char *argv[])
        }
 
        memset(&rule, 0, sizeof(struct nfacct_rule));
-       strcpy(rule.ifname, "seth_w0");
+       snprintf(rule.ifname, sizeof(rule.ifname), "seth_w0");
        resourced_ipt_begin(&iptc);
 
        resourced_ipt_dump(&iptc);
@@ -69,12 +70,12 @@ int main(int argc, char *argv[])
        for (i = 2; i < argc; ++i) {
                opt = argv[i];
 
-               sprintf(rule.name, pattern, opt);
-               parse = strtok(opt, "_");
+               snprintf(rule.name, sizeof(rule.name), pattern, opt);
+               parse = strtok_r(opt, "_", &saveptr);
                rule.iotype = atoi(parse);
-               parse = strtok(NULL, "_");
+               parse = strtok_r(NULL, "_", &saveptr);
                rule.iftype = atoi(parse);
-               parse = strtok(NULL, "_");
+               parse = strtok_r(NULL, "_", &saveptr);
                rule.classid = atoi(parse);
 
                if (cmd == CMD_INSERT)