From 11467189bc856c087de1fcc4b7abaf97220e3ada Mon Sep 17 00:00:00 2001 From: Hong-Mei Li Date: Mon, 1 Apr 2013 11:17:51 +0800 Subject: [PATCH] init: Fix potential null pointer issue With the old strdup() mechanism, it may return NULL if insufficient memory was available. So we check the return value or do not use strdup to avoid null pointer issue. Change-Id: Id684948d6cb6c2f06327f29a2ba692f9542fce80 Signed-off-by: Hong-Mei Li --- init/init.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/init/init.c b/init/init.c index b28b0ab23..39df0ffae 100755 --- a/init/init.c +++ b/init/init.c @@ -90,7 +90,7 @@ void notify_service_state(const char *name, const char *state) } static int have_console; -static char *console_name = "/dev/console"; +static char console_name[PROP_VALUE_MAX] = "/dev/console"; static time_t process_needs_restart; static const char *ENV[32]; @@ -430,7 +430,7 @@ static void restart_processes() static void msg_start(const char *name) { - struct service *svc; + struct service *svc = NULL; char *tmp = NULL; char *args = NULL; @@ -438,11 +438,13 @@ static void msg_start(const char *name) svc = service_find_by_name(name); else { tmp = strdup(name); - args = strchr(tmp, ':'); - *args = '\0'; - args++; + if (tmp) { + args = strchr(tmp, ':'); + *args = '\0'; + args++; - svc = service_find_by_name(tmp); + svc = service_find_by_name(tmp); + } } if (svc) { @@ -547,11 +549,9 @@ static int keychord_init_action(int nargs, char **args) static int console_init_action(int nargs, char **args) { int fd; - char tmp[PROP_VALUE_MAX]; if (console[0]) { - snprintf(tmp, sizeof(tmp), "/dev/%s", console); - console_name = strdup(tmp); + snprintf(console_name, sizeof(console_name), "/dev/%s", console); } fd = open(console_name, O_RDWR);