mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 21:51:31 +00:00
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
1 changed files with 11 additions and 6 deletions
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_filter *filt;
|
||||||
struct log_device *ldev;
|
struct log_device *ldev;
|
||||||
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ldev = log_device_find_by_name(drv_name);
|
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) {
|
if (cat_list) {
|
||||||
filt->flags |= LOGFF_HAS_CAT;
|
filt->flags |= LOGFF_HAS_CAT;
|
||||||
for (i = 0; ; i++) {
|
for (i = 0; ; i++) {
|
||||||
if (i == ARRAY_SIZE(filt->cat_list))
|
if (i == ARRAY_SIZE(filt->cat_list)) {
|
||||||
return -ENOSPC;
|
ret = -ENOSPC;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
filt->cat_list[i] = cat_list[i];
|
filt->cat_list[i] = cat_list[i];
|
||||||
if (cat_list[i] == LOGC_END)
|
if (cat_list[i] == LOGC_END)
|
||||||
break;
|
break;
|
||||||
|
@ -246,17 +249,19 @@ int log_add_filter(const char *drv_name, enum log_category_t cat_list[],
|
||||||
filt->max_level = max_level;
|
filt->max_level = max_level;
|
||||||
if (file_list) {
|
if (file_list) {
|
||||||
filt->file_list = strdup(file_list);
|
filt->file_list = strdup(file_list);
|
||||||
if (!filt->file_list)
|
if (!filt->file_list) {
|
||||||
goto nomem;
|
ret = ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
filt->filter_num = ldev->next_filter_num++;
|
filt->filter_num = ldev->next_filter_num++;
|
||||||
list_add_tail(&filt->sibling_node, &ldev->filter_head);
|
list_add_tail(&filt->sibling_node, &ldev->filter_head);
|
||||||
|
|
||||||
return filt->filter_num;
|
return filt->filter_num;
|
||||||
|
|
||||||
nomem:
|
err:
|
||||||
free(filt);
|
free(filt);
|
||||||
return -ENOMEM;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int log_remove_filter(const char *drv_name, int filter_num)
|
int log_remove_filter(const char *drv_name, int filter_num)
|
||||||
|
|
Loading…
Add table
Reference in a new issue