From 5bd9a34ad5c43670d009f45d212cc3afb1c3b4e3 Mon Sep 17 00:00:00 2001
From: Helge Deller <deller@localhost>
Date: Mon, 8 Aug 2022 14:51:38 +0000
Subject: [PATCH] ipl: Close file handles after usage

Signed-off-by: Helge Deller <deller@gmx.de>

diff --git a/ipl/ipl.c b/ipl/ipl.c
index ef422d3..b69cfb6 100644
--- a/ipl/ipl.c
+++ b/ipl/ipl.c
@@ -333,11 +333,13 @@ ls(char *path)
 			      512ULL * partition[part - 1].length);
     if(ext2_mount(part_fd, 0, 0) == -1) {
 	printf("Failed to mount partition %d\n", part);
+	fileio_close(part_fd);
 	return;
     }
 
     if((fd = ext2_open(kern_dir)) == -1) {
 	printf("Failed to open directory %s\n", kern_dir);
+	fileio_close(part_fd);
 	return;
     }
 
@@ -349,6 +351,7 @@ ls(char *path)
     
     printf("\n");
     ext2_close(fd);
+    fileio_close(part_fd);
     /* There's no umount ... since the next mount reuses
      * the current one's data structures ... */
 }
@@ -780,6 +783,7 @@ iplmain(int is_interactive, char *initialstackptr, int started_wide)
 
 	if (!load_kernel(kernfd, &entry, &wide))
 	{
+	    fileio_close(kernfd);
 	    die("ERROR: failed to load kernel\n");
 	    goto restart;
 	}
@@ -791,6 +795,7 @@ iplmain(int is_interactive, char *initialstackptr, int started_wide)
 	    {
 		printf("ERROR: failed to load ramdisk - proceeding anyway\n");
 	    }
+	    fileio_close(rdfd);
 	}
     }
     else /* kern_part > 0 && we're partitioned */
@@ -825,12 +830,17 @@ iplmain(int is_interactive, char *initialstackptr, int started_wide)
 	{
 	    printf("ERROR: open %s from partition %d failed\n",
 		kern_name, kern_part);
+	    fileio_close(mount_fd);
+	    fileio_close(part_fd);
 	    goto restart;
 	}
 
 	bkern_fd = byteio_open(kern_fd);
 	if (!load_kernel(bkern_fd, &entry, &wide))
 	{
+	    fileio_close(bkern_fd);
+	    fileio_close(mount_fd);
+	    fileio_close(part_fd);
 	    die("ERROR: failed to load kernel\n");
 	    goto restart;
 	}
