From 6e4b2dfaed5e5e5c617e0e45f969c1f571c13e27 Mon Sep 17 00:00:00 2001 From: Jialong Chen Date: Mon, 23 Mar 2020 16:42:01 -0400 Subject: [PATCH 7/7] [PATCH] Fix cd_header offset overflow with large pfn In function write_kdump_pages_and_bitmap_cyclic(), cd_header->offset is calculated by the following formula: cd_header->offset = (DISKDUMP_HEADER_BLOCKS + dh->sub_hdr_size + dh->bitmap_blocks) * dh->block_size; However, the variables of the right side are only int and unsigned int, so if dh->bitmap_blocks is very large, it causes an interger overflow. As a result, makedumpfile created a broken vmcore in a system with a physical address range from 0x602770ecf000 to 0x6027ffffffff, and the crash utility failed during session initialization, ending with the error message "crash: vmlinux and vmcore do not match!". Signed-off-by: Jialong Chen Signed-off-by: Kazuhito Hagio --- diskdump_mod.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedumpfile-1.6.7/diskdump_mod.h b/makedumpfile-1.6.7/diskdump_mod.h index 2676817..3733953 100644 --- a/makedumpfile-1.6.7/diskdump_mod.h +++ b/makedumpfile-1.6.7/diskdump_mod.h @@ -22,7 +22,7 @@ #define DISK_DUMP_SIGNATURE "DISKDUMP" #define KDUMP_SIGNATURE "KDUMP " #define SIG_LEN (sizeof(DUMP_PARTITION_SIGNATURE) - 1) -#define DISKDUMP_HEADER_BLOCKS (1) +#define DISKDUMP_HEADER_BLOCKS (1UL) /* * These are all remnants of the old "diskdump" facility, -- 2.7.5