cpu-sched: Fix leaks in load_config 38/242638/3
authorKarol Lewandowski <k.lewandowsk@samsung.com>
Fri, 28 Aug 2020 10:18:05 +0000 (12:18 +0200)
committerKarol Lewandowski <k.lewandowsk@samsung.com>
Fri, 28 Aug 2020 10:45:28 +0000 (12:45 +0200)
Change-Id: I46201ea6244fc8fd42cd388f4bc5f78d7d86fa7b

src/cpu/cpu-sched.c

index e6170cf..df718df 100644 (file)
@@ -238,25 +238,33 @@ static int load_config(struct parse_result *result, void *user_data)
 
        assert(data);
 
+       int ret = RESOURCED_ERROR_OUT_OF_MEMORY;
+       bool is_fg = !strcmp(result->name, CPU_SCHED_FG_NAME);
+       char *name = strdup(result->name);
+
        struct coreset *c = (struct coreset *)calloc(1, sizeof *c);
-       if (NULL == c)
-               return RESOURCED_ERROR_OUT_OF_MEMORY;
+       if (NULL == c || NULL == name)
+               goto err_out;
 
-       int r = cpu_sched_parse_cpuset(c, result->value);
-       if (r < 0) {
+       c->name = name;
+
+       if (cpu_sched_parse_cpuset(c, result->value) < 0) {
                _E("cpu-sched parse %s coreset: could not parse", result->name);
-               return RESOURCED_ERROR_FAIL;
+               ret = RESOURCED_ERROR_FAIL;
+               goto err_out;
        }
 
-       if (strcmp(result->name, CPU_SCHED_FG_NAME)) { /* not a 'foreground' group */
-               c->name = strdup(result->name);
-               data->apps = g_slist_append(data->apps, c);
-       } else {
-               c->name = strdup(CPU_SCHED_FG_NAME);
+       if (is_fg)
                data->fg = c;
-       }
+       else
+               data->apps = g_slist_append(data->apps, c);
 
-       return c->name ? RESOURCED_ERROR_NONE : RESOURCED_ERROR_OUT_OF_MEMORY;
+       return RESOURCED_ERROR_NONE;
+
+err_out:
+       free(c);
+       free(name);
+       return ret;
 }
 
 static int cpu_sched_parse_config(struct cpu_sched *data)