]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: Close file after mmaping it
authorSean Anderson <seanga2@gmail.com>
Sat, 4 Nov 2023 19:57:33 +0000 (15:57 -0400)
committerSimon Glass <sjg@chromium.org>
Wed, 15 Nov 2023 03:04:01 +0000 (20:04 -0700)
After opening pathname, we must close ifd once we are done with it.

Fixes: b9274095c2c ("sandbox: Add a way to map a file into memory")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/sandbox/cpu/os.c

index 85d0d6a17035d7038718f9316b4a7f140d1b4f44..95c26d855ab0e21ee7fcef265e4ed14539f6760b 100644 (file)
@@ -219,7 +219,7 @@ int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep)
 {
        void *ptr;
        off_t size;
-       int ifd;
+       int ifd, ret = 0;
 
        ifd = os_open(pathname, os_flags);
        if (ifd < 0) {
@@ -229,23 +229,28 @@ int os_map_file(const char *pathname, int os_flags, void **bufp, int *sizep)
        size = os_filesize(ifd);
        if (size < 0) {
                printf("Cannot get file size of '%s'\n", pathname);
-               return -EIO;
+               ret = -EIO;
+               goto out;
        }
        if ((unsigned long long)size > (unsigned long long)SIZE_MAX) {
                printf("File '%s' too large to map\n", pathname);
-               return -EIO;
+               ret = -EIO;
+               goto out;
        }
 
        ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, ifd, 0);
        if (ptr == MAP_FAILED) {
                printf("Can't map file '%s': %s\n", pathname, strerror(errno));
-               return -EPERM;
+               ret = -EPERM;
+               goto out;
        }
 
        *bufp = ptr;
        *sizep = size;
 
-       return 0;
+out:
+       os_close(ifd);
+       return ret;
 }
 
 int os_unmap(void *buf, int size)