summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhang Yanfei <zhangyanfei@cn.fujitsu.com>2013-03-25 23:17:29 +0800
committerSimon Horman <horms@verge.net.au>2013-03-27 21:42:04 +0900
commitc1acf0ea9eb746cf6d9d9a42d79245f721ed2e96 (patch)
tree1103372a64a1fbc6f8fc52b8d68ba58a79950645
parenta99e54d0f6334e5e5b4713b7a7dd865d903f23fc (diff)
kexec: x86_64: elf: fix memory leak caused by get_command_line
Since get_command_line returns dynamically allocated memory, it is easy for the caller to forget freeing the memory. Here fixes a memory leak caused by this function. Signed-off-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r--kexec/arch/x86_64/kexec-elf-x86_64.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kexec/arch/x86_64/kexec-elf-x86_64.c b/kexec/arch/x86_64/kexec-elf-x86_64.c
index a3fc728..4a41780 100644
--- a/kexec/arch/x86_64/kexec-elf-x86_64.c
+++ b/kexec/arch/x86_64/kexec-elf-x86_64.c
@@ -89,6 +89,7 @@ int elf_x86_64_load(int argc, char **argv, const char *buf, off_t len,
struct mem_ehdr ehdr;
const char *append = NULL;
char *command_line = NULL, *modified_cmdline;
+ char *tmp_cmdline = NULL;
int command_line_len;
const char *ramdisk;
unsigned long entry, max_addr;
@@ -135,7 +136,7 @@ int elf_x86_64_load(int argc, char **argv, const char *buf, off_t len,
append = optarg;
break;
case OPT_REUSE_CMDLINE:
- command_line = get_command_line();
+ tmp_cmdline = get_command_line();
break;
case OPT_RAMDISK:
ramdisk = optarg;
@@ -155,7 +156,9 @@ int elf_x86_64_load(int argc, char **argv, const char *buf, off_t len,
break;
}
}
- command_line = concat_cmdline(command_line, append);
+ command_line = concat_cmdline(tmp_cmdline, append);
+ if (tmp_cmdline)
+ free(tmp_cmdline);
command_line_len = 0;
if (command_line) {
command_line_len = strlen(command_line) +1;