From: Jeremy Kerr Date: Thu, 1 Aug 2013 07:25:53 +0000 (+0800) Subject: discover: fix segfault on failed boot image load X-Git-Tag: v1.0.0~536 X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=f9a63d3a640cb30a12598cedc0dd7d8b6fc5b4de;hp=404c07fc44449be7b011d1961280ef9c96e0760d discover: fix segfault on failed boot image load If the boot image fails to load, we end up calling talloc_free on an unitialised are of stack (boot_task.local_initrd). Move the initialisers a little earlier, so we always NULL pointers before potentially freeing. Signed-off-by: Jeremy Kerr --- diff --git a/discover/boot.c b/discover/boot.c index ed30ef9..e57810d 100644 --- a/discover/boot.c +++ b/discover/boot.c @@ -321,6 +321,9 @@ int boot(void *ctx, struct discover_boot_option *opt, struct boot_command *cmd, result = -1; + boot_task.local_initrd = NULL; + boot_task.local_dtb = NULL; + update_status(status_fn, status_arg, BOOT_STATUS_INFO, "loading kernel"); boot_task.local_image = load_url(NULL, image, &clean_image); @@ -330,7 +333,6 @@ int boot(void *ctx, struct discover_boot_option *opt, struct boot_command *cmd, goto no_load; } - boot_task.local_initrd = NULL; if (initrd) { update_status(status_fn, status_arg, BOOT_STATUS_INFO, "loading initrd"); @@ -342,7 +344,6 @@ int boot(void *ctx, struct discover_boot_option *opt, struct boot_command *cmd, } } - boot_task.local_dtb = NULL; if (dtb) { update_status(status_fn, status_arg, BOOT_STATUS_INFO, "loading device tree");