From: Zhang Yanfei <[email protected]>

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 <[email protected]>
---
 kexec/arch/x86_64/kexec-elf-x86_64.c |    7 +++++--
 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;
-- 
1.7.1


_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to