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

Mathias Krause minipli at grsecurity.net
Tue Dec 1 08:35:54 UTC 2020


Am 01.12.20 um 03:56 schrieb Qianli Zhao:
> 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;
>  		}
>  	}
>  
> 

Looks good to me, thanks!

Acked-and-tested-by: Mathias Krause <minipli at grsecurity.net>




More information about the Crash-utility mailing list