[Powertop] [PATCH 1/2] perf_bundle: Check memory allocation failure

Namhyung Kim <namhyung at gmail.com> Tue, 18 Sep 2012 23:21:02 +0900
Newsgroups dev.linux.lists.powertop
Message-ID <[email protected]>
--===============9016938335194202470==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable

Check return value of malloc/strdup not to make NULL dereferences.

Signed-off-by: Namhyung Kim <namhyung(a)gmail.com>
---
 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_he=
ader *header, void *coo
 	vector<void *> *vector;
 =

 	buffer =3D (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 =3D strdup(event_name);
+	if (!name)
+		return;
+
 	char *sys =3D strtok_r(name, ":", &tptr);
 	char *event =3D strtok_r(NULL, ":", &tptr);
 	char *file;
@@ -137,6 +143,9 @@ static void parse_event_format(const char *event_name)
 =

 	file =3D (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 =3D read_file(file);
@@ -169,6 +178,10 @@ bool perf_bundle::add_event(const char *event_name)
 		if ((int)ev->trace_type >=3D 0) {
 			if (event_names.find(ev->trace_type) =3D=3D event_names.end()) {
 				event_names[ev->trace_type] =3D strdup(event_name);
+				if (!event_names[ev->trace_type]) {
+					delete ev;
+					continue;
+				}
 				parse_event_format(event_name);
 			}
 			events.push_back(ev);
-- =

1.7.9.2


--===============9016938335194202470==--