Skip to content
Snippets Groups Projects
Commit ff1522bb authored by David Engraf's avatar David Engraf Committed by Linus Torvalds
Browse files

initramfs: cleanup incomplete rootfs

Unpacking an external initrd may fail e.g.  not enough memory.  This
leads to an incomplete rootfs because some files might be extracted
already.  Fixed by cleaning the rootfs so the kernel is not using an
incomplete rootfs.

Link: http://lkml.kernel.org/r/20181030151805.5519-1-david.engraf@sysgo.com


Signed-off-by: default avatarDavid Engraf <david.engraf@sysgo.com>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Philippe Ombredanne <pombredanne@nexb.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b058809b
No related branches found
No related tags found
No related merge requests found
...@@ -550,7 +550,6 @@ skip: ...@@ -550,7 +550,6 @@ skip:
initrd_end = 0; initrd_end = 0;
} }
#ifdef CONFIG_BLK_DEV_RAM
#define BUF_SIZE 1024 #define BUF_SIZE 1024
static void __init clean_rootfs(void) static void __init clean_rootfs(void)
{ {
...@@ -597,7 +596,6 @@ static void __init clean_rootfs(void) ...@@ -597,7 +596,6 @@ static void __init clean_rootfs(void)
ksys_close(fd); ksys_close(fd);
kfree(buf); kfree(buf);
} }
#endif
static int __init populate_rootfs(void) static int __init populate_rootfs(void)
{ {
...@@ -640,8 +638,10 @@ static int __init populate_rootfs(void) ...@@ -640,8 +638,10 @@ static int __init populate_rootfs(void)
printk(KERN_INFO "Unpacking initramfs...\n"); printk(KERN_INFO "Unpacking initramfs...\n");
err = unpack_to_rootfs((char *)initrd_start, err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start); initrd_end - initrd_start);
if (err) if (err) {
printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err); printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err);
clean_rootfs();
}
free_initrd(); free_initrd();
#endif #endif
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment