2020-07-14 12:31:39

by Peng Fan

[permalink] [raw]
Subject: [PATCH v2] mips/vdso: Fix resource leaks in genvdso.c

Close "fd" before the return of map_vdso() and close "out_file"
in main().

Signed-off-by: Peng Fan <[email protected]>
---

v2:
- add one missing fclose()

---
arch/mips/vdso/genvdso.c | 10 ++++++++++
1 file changed, 10 insertions(+)

diff --git a/arch/mips/vdso/genvdso.c b/arch/mips/vdso/genvdso.c
index be57b832..ccba50e 100644
--- a/arch/mips/vdso/genvdso.c
+++ b/arch/mips/vdso/genvdso.c
@@ -122,6 +122,7 @@ static void *map_vdso(const char *path, size_t *_size)
if (fstat(fd, &stat) != 0) {
fprintf(stderr, "%s: Failed to stat '%s': %s\n", program_name,
path, strerror(errno));
+ close(fd);
return NULL;
}

@@ -130,6 +131,7 @@ static void *map_vdso(const char *path, size_t *_size)
if (addr == MAP_FAILED) {
fprintf(stderr, "%s: Failed to map '%s': %s\n", program_name,
path, strerror(errno));
+ close(fd);
return NULL;
}

@@ -139,6 +141,7 @@ static void *map_vdso(const char *path, size_t *_size)
if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0) {
fprintf(stderr, "%s: '%s' is not an ELF file\n", program_name,
path);
+ close(fd);
return NULL;
}

@@ -150,6 +153,7 @@ static void *map_vdso(const char *path, size_t *_size)
default:
fprintf(stderr, "%s: '%s' has invalid ELF class\n",
program_name, path);
+ close(fd);
return NULL;
}

@@ -161,6 +165,7 @@ static void *map_vdso(const char *path, size_t *_size)
default:
fprintf(stderr, "%s: '%s' has invalid ELF data order\n",
program_name, path);
+ close(fd);
return NULL;
}

@@ -168,15 +173,18 @@ static void *map_vdso(const char *path, size_t *_size)
fprintf(stderr,
"%s: '%s' has invalid ELF machine (expected EM_MIPS)\n",
program_name, path);
+ close(fd);
return NULL;
} else if (swap_uint16(ehdr->e_type) != ET_DYN) {
fprintf(stderr,
"%s: '%s' has invalid ELF type (expected ET_DYN)\n",
program_name, path);
+ close(fd);
return NULL;
}

*_size = stat.st_size;
+ close(fd);
return addr;
}

@@ -293,10 +301,12 @@ int main(int argc, char **argv)
/* Calculate and write symbol offsets to <output file> */
if (!get_symbols(dbg_vdso_path, dbg_vdso)) {
unlink(out_path);
+ fclose(out_file);
return EXIT_FAILURE;
}

fprintf(out_file, "};\n");
+ fclose(out_file);

return EXIT_SUCCESS;
}
--
2.1.0


2020-07-16 10:05:48

by Thomas Bogendoerfer

[permalink] [raw]
Subject: Re: [PATCH v2] mips/vdso: Fix resource leaks in genvdso.c

On Tue, Jul 14, 2020 at 08:30:18PM +0800, Peng Fan wrote:
> Close "fd" before the return of map_vdso() and close "out_file"
> in main().
>
> Signed-off-by: Peng Fan <[email protected]>
> ---
>
> v2:
> - add one missing fclose()
>
> ---
> arch/mips/vdso/genvdso.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)

applied to mips-next.

Thomas.

--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]