We free the initrd memory for all successful or error cases except
for the case where opening /initrd.image fails, which looks like an
oversight.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 init/initramfs.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/init/initramfs.c b/init/initramfs.c
index 7cea802d00ef..1cba6bbeeb75 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -610,13 +610,12 @@ static int __init populate_rootfs(void)
                printk(KERN_INFO "Trying to unpack rootfs image as 
initramfs...\n");
                err = unpack_to_rootfs((char *)initrd_start,
                        initrd_end - initrd_start);
-               if (!err) {
-                       free_initrd();
+               if (!err)
                        goto done;
-               } else {
-                       clean_rootfs();
-                       unpack_to_rootfs(__initramfs_start, __initramfs_size);
-               }
+
+               clean_rootfs();
+               unpack_to_rootfs(__initramfs_start, __initramfs_size);
+
                printk(KERN_INFO "rootfs image is not initramfs (%s)"
                                "; looks like an initrd\n", err);
                fd = ksys_open("/initrd.image",
@@ -630,7 +629,6 @@ static int __init populate_rootfs(void)
                                       written, initrd_end - initrd_start);
 
                        ksys_close(fd);
-                       free_initrd();
                }
        done:
                /* empty statement */;
@@ -642,9 +640,9 @@ static int __init populate_rootfs(void)
                        printk(KERN_EMERG "Initramfs unpacking failed: %s\n", 
err);
                        clean_rootfs();
                }
-               free_initrd();
 #endif
        }
+       free_initrd();
        flush_delayed_fput();
        return 0;
 }
-- 
2.20.1

Reply via email to