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:
parent
004d00914a
commit
45fac9fc18
17
common/log.c
17
common/log.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user