summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@arm.linux.org.uk>2016-06-06 18:00:00 +0100
committerSimon Horman <horms@verge.net.au>2016-06-08 09:22:28 +0900
commit38c18bb7d1e2db23491619928ca722750d510ce5 (patch)
tree378f733b24be0c82d69e5abdde04ce1c98b4935a
parent2185c79d3bf443be85809f3d0e0103035ac7140b (diff)
downloadkexec-tools-38c18bb7d1e2db23491619928ca722750d510ce5.tar.gz
arm: fix get_kernel_stext_sym() to close its file
Fix get_kernel_stext_sym() so that it closes its file once it's finsihed with it - there's no need to leak file descriptors. Reviewed-by: Pratyush Anand <panand@redhat.com> Signed-off-by: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Simon Horman <horms@verge.net.au>
-rw-r--r--kexec/arch/arm/crashdump-arm.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/kexec/arch/arm/crashdump-arm.c b/kexec/arch/arm/crashdump-arm.c
index b523e5f1..a390187f 100644
--- a/kexec/arch/arm/crashdump-arm.c
+++ b/kexec/arch/arm/crashdump-arm.c
@@ -71,25 +71,34 @@ static unsigned long long get_kernel_stext_sym(void)
char sym[128];
char line[128];
FILE *fp;
- unsigned long long vaddr;
+ unsigned long long vaddr = 0;
char type;
- fp = fopen(kallsyms, "r"); if (!fp) {
+ fp = fopen(kallsyms, "r");
+ if (!fp) {
fprintf(stderr, "Cannot open %s\n", kallsyms);
return 0;
}
while(fgets(line, sizeof(line), fp) != NULL) {
- if (sscanf(line, "%Lx %c %s", &vaddr, &type, sym) != 3)
+ unsigned long long addr;
+
+ if (sscanf(line, "%Lx %c %s", &addr, &type, sym) != 3)
continue;
+
if (strcmp(sym, stext) == 0) {
- dbgprintf("kernel symbol %s vaddr = %16llx\n", stext, vaddr);
- return vaddr;
+ dbgprintf("kernel symbol %s vaddr = %#llx\n", stext, addr);
+ vaddr = addr;
+ break;
}
}
- fprintf(stderr, "Cannot get kernel %s symbol address\n", stext);
- return 0;
+ fclose(fp);
+
+ if (vaddr == 0)
+ fprintf(stderr, "Cannot get kernel %s symbol address\n", stext);
+
+ return vaddr;
}
static int get_kernel_page_offset(struct kexec_info *info,