On 9/18/2012 7:21 AM, Namhyung Kim wrote: > Check return value of malloc/strdup not to make NULL dereferences. I don't mind these patches; they are clean code however, one of the core userspace developers at work basically said "we don't check for malloc NULL in userspace; if that ever happens the system is so screwed up anyway that you just cannot continue". > > Signed-off-by: Namhyung Kim > --- > src/perf/perf_bundle.cpp | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/src/perf/perf_bundle.cpp b/src/perf/perf_bundle.cpp > index 38e1e91..4e70f30 100644 > --- a/src/perf/perf_bundle.cpp > +++ b/src/perf/perf_bundle.cpp > @@ -60,6 +60,9 @@ void perf_bundle_event::handle_event(struct perf_event_header *header, void *coo > vector *vector; > > buffer = (unsigned char *)malloc(header->size); > + if (!buffer) > + return; > + > memcpy(buffer, header, header->size); > > #ifdef USE_DECLTYPE > @@ -130,6 +133,9 @@ static void parse_event_format(const char *event_name) > { > char *tptr; > char *name = strdup(event_name); > + if (!name) > + return; > + > char *sys = strtok_r(name, ":", &tptr); > char *event = strtok_r(NULL, ":", &tptr); > char *file; > @@ -137,6 +143,9 @@ static void parse_event_format(const char *event_name) > > file = (char *)malloc(strlen(sys) + strlen(event) + > strlen("/sys/kernel/debug/tracing/events////format") + 2); > + if (!file) > + return; > + > sprintf(file, "/sys/kernel/debug/tracing/events/%s/%s/format", sys, event); > > buf = read_file(file); > @@ -169,6 +178,10 @@ bool perf_bundle::add_event(const char *event_name) > if ((int)ev->trace_type >= 0) { > if (event_names.find(ev->trace_type) == event_names.end()) { > event_names[ev->trace_type] = strdup(event_name); > + if (!event_names[ev->trace_type]) { > + delete ev; > + continue; > + } > parse_event_format(event_name); > } > events.push_back(ev); >