From c59af3ab34f41f259eb2f019e9f5f9ad3229893f Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Tue, 2 Feb 2010 14:42:02 +1100 Subject: don't leak in concat_cmdline Cc: Eric W. Biederman Signed-off-by: Simon Horman --- kexec/kexec.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'kexec/kexec.c') diff --git a/kexec/kexec.c b/kexec/kexec.c index f4c22a6..db73b0e 100644 --- a/kexec/kexec.c +++ b/kexec/kexec.c @@ -62,6 +62,14 @@ void die(char *fmt, ...) exit(1); } +char *xstrdup(const char *str) +{ + char *new = strdup(str); + if (!new) + die("Cannot strdup \"%s\": %s\n", + str, strerror(errno)); + return new; +} void *xmalloc(size_t size) { @@ -994,15 +1002,15 @@ void check_reuse_initrd(void) free(line); } -const char *concat_cmdline(const char *base, const char *append) +char *concat_cmdline(const char *base, const char *append) { - const char *cmdline; + char *cmdline; if (!base && !append) return NULL; - if (!base) - return append; - if (!append) - return base; + if (append) + return xstrdup(append); + if (base) + return xstrdup(base); cmdline = xmalloc(strlen(base) + 1 + strlen(append) + 1); strcpy(cmdline, base); strcat(cmdline, " "); -- cgit