]> Git Repo - linux.git/commitdiff
initramfs: cleanup incomplete rootfs
authorDavid Engraf <[email protected]>
Thu, 3 Jan 2019 23:28:31 +0000 (15:28 -0800)
committerLinus Torvalds <[email protected]>
Fri, 4 Jan 2019 21:13:47 +0000 (13:13 -0800)
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/[email protected]
Signed-off-by: David Engraf <[email protected]>
Cc: Dominik Brodowski <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Philippe Ombredanne <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Cc: Luc Van Oostenryck <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
init/initramfs.c

index fca899622937f48be0b47b25479fe3bff2252fcf..7cea802d00efa3bd7c676af35b7ab676dd1a00a6 100644 (file)
@@ -550,7 +550,6 @@ skip:
        initrd_end = 0;
 }
 
-#ifdef CONFIG_BLK_DEV_RAM
 #define BUF_SIZE 1024
 static void __init clean_rootfs(void)
 {
@@ -597,7 +596,6 @@ static void __init clean_rootfs(void)
        ksys_close(fd);
        kfree(buf);
 }
-#endif
 
 static int __init populate_rootfs(void)
 {
@@ -640,8 +638,10 @@ static int __init populate_rootfs(void)
                printk(KERN_INFO "Unpacking initramfs...\n");
                err = unpack_to_rootfs((char *)initrd_start,
                        initrd_end - initrd_start);
-               if (err)
+               if (err) {
                        printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err);
+                       clean_rootfs();
+               }
                free_initrd();
 #endif
        }
This page took 0.046641 seconds and 4 git commands to generate.