sandbox: Close file after mmaping it

After opening pathname, we must close ifd once we are done with it.

Fixes: b9274095c2 ("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>
This commit is contained in:
Sean Anderson 2023-11-04 15:57:33 -04:00 committed by Simon Glass
parent 2c61c0eb14
commit f6d76e6878

View File

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