[Crash-utility] [PATCH V2] netdump: fix regression for tiny kdump files

Qianli Zhao zhaoqianligood at gmail.com
Tue Dec 1 02:56:02 UTC 2020


From: Qianli Zhao <zhaoqianli at xiaomi.com>

Commit f42db6a33f0e ("Support core files with "unusual" layout")
increased the minimal file size from MIN_NETDUMP_ELF_HEADER_SIZE to
SAFE_NETDUMP_ELF_HEADER_SIZE which lead to crash rejecting very
small kdump files.

Fix that by erroring out only if we get less than
MIN_NETDUMP_ELF_HEADER_SIZE bytes.

Signed-off-by: Qianli Zhao <zhaoqianli at xiaomi.com>
---
- Update commit message
- Add more accurate judgment of read() return value
---
 netdump.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/netdump.c b/netdump.c
index c76d9dd..9a36931 100644
--- a/netdump.c
+++ b/netdump.c
@@ -119,7 +119,8 @@ is_netdump(char *file, ulong source_query)
 	Elf64_Phdr *load64;
 	char *eheader, *sect0;
 	char buf[BUFSIZE];
-	size_t size, len, tot;
+	ssize_t size;
+	size_t len, tot;
         Elf32_Off offset32;
         Elf64_Off offset64;
 	ulong format;
@@ -142,10 +143,14 @@ is_netdump(char *file, ulong source_query)
 		if (!read_flattened_format(fd, 0, eheader, size))
 			goto bailout;
 	} else {
-		if (read(fd, eheader, size) != size) {
+		size = read(fd, eheader, size);
+		if (size < 0) {
 			sprintf(buf, "%s: ELF header read", file);
 			perror(buf);
 			goto bailout;
+		} else if (size < MIN_NETDUMP_ELF_HEADER_SIZE) {
+			fprintf(stderr, "%s: file too small!\n", file);
+			goto bailout;
 		}
 	}
 
-- 
2.7.4




More information about the Crash-utility mailing list