mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-18 02:46:06 +00:00
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 <fanpeng@loongson.cn> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
parent
c8353fbdfc
commit
a859647b4e
@ -122,6 +122,7 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
if (fstat(fd, &stat) != 0) {
|
if (fstat(fd, &stat) != 0) {
|
||||||
fprintf(stderr, "%s: Failed to stat '%s': %s\n", program_name,
|
fprintf(stderr, "%s: Failed to stat '%s': %s\n", program_name,
|
||||||
path, strerror(errno));
|
path, strerror(errno));
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +131,7 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
if (addr == MAP_FAILED) {
|
if (addr == MAP_FAILED) {
|
||||||
fprintf(stderr, "%s: Failed to map '%s': %s\n", program_name,
|
fprintf(stderr, "%s: Failed to map '%s': %s\n", program_name,
|
||||||
path, strerror(errno));
|
path, strerror(errno));
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,6 +141,7 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0) {
|
if (memcmp(ehdr->e_ident, ELFMAG, SELFMAG) != 0) {
|
||||||
fprintf(stderr, "%s: '%s' is not an ELF file\n", program_name,
|
fprintf(stderr, "%s: '%s' is not an ELF file\n", program_name,
|
||||||
path);
|
path);
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,6 +153,7 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s: '%s' has invalid ELF class\n",
|
fprintf(stderr, "%s: '%s' has invalid ELF class\n",
|
||||||
program_name, path);
|
program_name, path);
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +165,7 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
default:
|
default:
|
||||||
fprintf(stderr, "%s: '%s' has invalid ELF data order\n",
|
fprintf(stderr, "%s: '%s' has invalid ELF data order\n",
|
||||||
program_name, path);
|
program_name, path);
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,15 +173,18 @@ static void *map_vdso(const char *path, size_t *_size)
|
|||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: '%s' has invalid ELF machine (expected EM_MIPS)\n",
|
"%s: '%s' has invalid ELF machine (expected EM_MIPS)\n",
|
||||||
program_name, path);
|
program_name, path);
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (swap_uint16(ehdr->e_type) != ET_DYN) {
|
} else if (swap_uint16(ehdr->e_type) != ET_DYN) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"%s: '%s' has invalid ELF type (expected ET_DYN)\n",
|
"%s: '%s' has invalid ELF type (expected ET_DYN)\n",
|
||||||
program_name, path);
|
program_name, path);
|
||||||
|
close(fd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*_size = stat.st_size;
|
*_size = stat.st_size;
|
||||||
|
close(fd);
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,10 +301,12 @@ int main(int argc, char **argv)
|
|||||||
/* Calculate and write symbol offsets to <output file> */
|
/* Calculate and write symbol offsets to <output file> */
|
||||||
if (!get_symbols(dbg_vdso_path, dbg_vdso)) {
|
if (!get_symbols(dbg_vdso_path, dbg_vdso)) {
|
||||||
unlink(out_path);
|
unlink(out_path);
|
||||||
|
fclose(out_file);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(out_file, "};\n");
|
fprintf(out_file, "};\n");
|
||||||
|
fclose(out_file);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user