diff options
| author | Namhyung Kim <namhyung@kernel.org> | 2013-12-12 02:36:05 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2013-12-13 08:30:21 -0500 |
| commit | ef3072cd1d5c2ea229f7abf8d6475e0c200eeb71 (patch) | |
| tree | 1adf00815b64a9f3ef4b3ff2cc8d4f6e2830913e /tools/lib/traceevent | |
| parent | 9451a2fd78c785445afe0f6966b2043c3ee187ca (diff) | |
tools lib traceevent: Get rid of die in add_filter_type()
The realloc() should check return value and not to overwrite previous
pointer in case of error.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung.kim@lge.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1386833777-3790-3-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/traceevent')
| -rw-r--r-- | tools/lib/traceevent/parse-filter.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/tools/lib/traceevent/parse-filter.c b/tools/lib/traceevent/parse-filter.c index d4b0bac80dc8..767de4f1e8ee 100644 --- a/tools/lib/traceevent/parse-filter.c +++ b/tools/lib/traceevent/parse-filter.c | |||
| @@ -161,11 +161,13 @@ add_filter_type(struct event_filter *filter, int id) | |||
| 161 | if (filter_type) | 161 | if (filter_type) |
| 162 | return filter_type; | 162 | return filter_type; |
| 163 | 163 | ||
| 164 | filter->event_filters = realloc(filter->event_filters, | 164 | filter_type = realloc(filter->event_filters, |
| 165 | sizeof(*filter->event_filters) * | 165 | sizeof(*filter->event_filters) * |
| 166 | (filter->filters + 1)); | 166 | (filter->filters + 1)); |
| 167 | if (!filter->event_filters) | 167 | if (!filter_type) |
| 168 | die("Could not allocate filter"); | 168 | return NULL; |
| 169 | |||
| 170 | filter->event_filters = filter_type; | ||
| 169 | 171 | ||
| 170 | for (i = 0; i < filter->filters; i++) { | 172 | for (i = 0; i < filter->filters; i++) { |
| 171 | if (filter->event_filters[i].event_id > id) | 173 | if (filter->event_filters[i].event_id > id) |
| @@ -1180,6 +1182,12 @@ static int filter_event(struct event_filter *filter, | |||
| 1180 | } | 1182 | } |
| 1181 | 1183 | ||
| 1182 | filter_type = add_filter_type(filter, event->id); | 1184 | filter_type = add_filter_type(filter, event->id); |
| 1185 | if (filter_type == NULL) { | ||
| 1186 | show_error(error_str, "failed to add a new filter: %s", | ||
| 1187 | filter_str ? filter_str : "true"); | ||
| 1188 | return -1; | ||
| 1189 | } | ||
| 1190 | |||
| 1183 | if (filter_type->filter) | 1191 | if (filter_type->filter) |
| 1184 | free_arg(filter_type->filter); | 1192 | free_arg(filter_type->filter); |
| 1185 | filter_type->filter = arg; | 1193 | filter_type->filter = arg; |
| @@ -1417,6 +1425,9 @@ static int copy_filter_type(struct event_filter *filter, | |||
| 1417 | arg->boolean.value = 0; | 1425 | arg->boolean.value = 0; |
| 1418 | 1426 | ||
| 1419 | filter_type = add_filter_type(filter, event->id); | 1427 | filter_type = add_filter_type(filter, event->id); |
| 1428 | if (filter_type == NULL) | ||
| 1429 | return -1; | ||
| 1430 | |||
| 1420 | filter_type->filter = arg; | 1431 | filter_type->filter = arg; |
| 1421 | 1432 | ||
| 1422 | free(str); | 1433 | free(str); |
