Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -550,7 +550,6 @@ static void __init free_initrd(void)
	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
	}