Pull perf fix from Thomas Gleixner: "A single fix for the perf core plugging a memory leak in the address filter parser" * tag 'perf-urgent-2020-11-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf/core: Fix a memory leak in perf_event_parse_addr_filter()
Showing the changes to kernel (1 of 1 file). Show all
Unified · Split
| @@ -10085,6 +10085,7 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr, · 10084 unmodified lines | ||
| 10085 | 10085 | if (token == IF_SRC_FILE || token == IF_SRC_FILEADDR) { |
| 10086 | 10086 | int fpos = token == IF_SRC_FILE ? 2 : 1; |
| 10087 | 10087 | |
| 10088 | + kfree(filename); | |
| 10088 | 10089 | filename = match_strdup(&args[fpos]); |
| 10089 | 10090 | if (!filename) { |
| 10090 | 10091 | ret = -ENOMEM; |
| @@ -10131,16 +10132,13 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr, · 40 unmodified lines | ||
| 10131 | 10132 | */ |
| 10132 | 10133 | ret = -EOPNOTSUPP; |
| 10133 | 10134 | if (!event->ctx->task) |
| 10134 | − goto fail_free_name; | |
| 10135 | + goto fail; | |
| 10135 | 10136 | |
| 10136 | 10137 | /* look up the path and grab its inode */ |
| 10137 | 10138 | ret = kern_path(filename, LOOKUP_FOLLOW, |
| 10138 | 10139 | &filter->path); |
| 10139 | 10140 | if (ret) |
| 10140 | − goto fail_free_name; | |
| 10141 | − | |
| 10142 | − kfree(filename); | |
| 10143 | − filename = NULL; | |
| 10141 | + goto fail; | |
| 10144 | 10142 | |
| 10145 | 10143 | ret = -EINVAL; |
| 10146 | 10144 | if (!filter->path.dentry || |
| @@ -10160,13 +10158,13 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr, · 13 unmodified lines | ||
| 10160 | 10158 | if (state != IF_STATE_ACTION) |
| 10161 | 10159 | goto fail; |
| 10162 | 10160 | |
| 10161 | + kfree(filename); | |
| 10163 | 10162 | kfree(orig); |
| 10164 | 10163 | |
| 10165 | 10164 | return 0; |
| 10166 | 10165 | |
| 10167 | −fail_free_name: | |
| 10168 | − kfree(filename); | |
| 10169 | 10166 | fail: |
| 10167 | + kfree(filename); | |
| 10170 | 10168 | free_filters_list(filters); |
| 10171 | 10169 | kfree(orig); |
| 10172 | 10170 | |