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/i386/kexec-multiboot-x86.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/kexec/arch/i386/kexec-multiboot-x86.c 
b/kexec/arch/i386/kexec-multiboot-x86.c
index 4252f75..4520fd7 100644
--- a/kexec/arch/i386/kexec-multiboot-x86.c
+++ b/kexec/arch/i386/kexec-multiboot-x86.c
@@ -147,7 +147,7 @@ int multiboot_x86_load(int argc, char **argv, const char 
*buf, off_t len,
        unsigned long mbi_base;
        struct entry32_regs regs;
        size_t mbi_bytes, mbi_offset;
-       char *command_line = NULL;
+       char *command_line = NULL, *tmp_cmdline = NULL;
        char *imagename, *cp, *append = NULL;;
        struct memory_range *range;
        int ranges;
@@ -195,7 +195,7 @@ int multiboot_x86_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_MOD:
                        modules++;
@@ -204,7 +204,10 @@ int multiboot_x86_load(int argc, char **argv, const char 
*buf, off_t len,
                }
        }
        imagename = argv[optind];
-       command_line = concat_cmdline(command_line, append);
+       command_line = concat_cmdline(tmp_cmdline, append);
+       if (tmp_cmdline) {
+               free(tmp_cmdline);
+       }
        command_line_len = strlen(command_line) + strlen(imagename) + 2;
        
        /* Load the ELF executable */
-- 
1.7.1

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

Reply via email to