log: Correct missing free() on error in log_add_filter()

If there is a problem with the parameters to log_add_filter(), the memory
allocated is currently not freed. Fix this.

Reported-by: Coverity (CID: 171962)

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2018-04-02 02:42:39 -06:00 committed by Tom Rini
parent 004d00914a
commit 45fac9fc18
1 changed files with 11 additions and 6 deletions

View File

@ -224,6 +224,7 @@ int log_add_filter(const char *drv_name, enum log_category_t cat_list[],
{
struct log_filter *filt;
struct log_device *ldev;
int ret;
int i;
ldev = log_device_find_by_name(drv_name);
@ -236,8 +237,10 @@ int log_add_filter(const char *drv_name, enum log_category_t cat_list[],
if (cat_list) {
filt->flags |= LOGFF_HAS_CAT;
for (i = 0; ; i++) {
if (i == ARRAY_SIZE(filt->cat_list))
return -ENOSPC;
if (i == ARRAY_SIZE(filt->cat_list)) {
ret = -ENOSPC;
goto err;
}
filt->cat_list[i] = cat_list[i];
if (cat_list[i] == LOGC_END)
break;
@ -246,17 +249,19 @@ int log_add_filter(const char *drv_name, enum log_category_t cat_list[],
filt->max_level = max_level;
if (file_list) {
filt->file_list = strdup(file_list);
if (!filt->file_list)
goto nomem;
if (!filt->file_list) {
ret = ENOMEM;
goto err;
}
}
filt->filter_num = ldev->next_filter_num++;
list_add_tail(&filt->sibling_node, &ldev->filter_head);
return filt->filter_num;
nomem:
err:
free(filt);
return -ENOMEM;
return ret;
}
int log_remove_filter(const char *drv_name, int filter_num)