Accepting request 791930 from Kernel:kdump
- Add -fcommon in order to fix boo#1160282. - Refresh patch with upstream version - makedumpfile-arm64-VA-range-SUSE.patch + makedumpfile-arm64-Align-PMD_SECTION_MASK-with-PHYS_MASK.patch - makedumpfile-Fix-cd_header-offset-overflow-with-large-pfn.patch: Fix integer overflow with large memory configuration (bsc#1168234). OBS-URL: https://build.opensuse.org/request/show/791930 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/makedumpfile?expand=0&rev=77
This commit is contained in:
commit
47f325f5fb
@ -0,0 +1,44 @@
|
||||
From 6e4b2dfaed5e5e5c617e0e45f969c1f571c13e27 Mon Sep 17 00:00:00 2001
|
||||
From: Jialong Chen <chenjialong@huawei.com>
|
||||
Date: Mon, 23 Mar 2020 16:42:01 -0400
|
||||
Subject: Fix cd_header offset overflow with large pfn
|
||||
Upstream: merged (expected 1.6.8)
|
||||
Git-commit: 6e4b2dfaed5e5e5c617e0e45f969c1f571c13e27
|
||||
|
||||
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 <chenjialong@huawei.com>
|
||||
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
||||
---
|
||||
diskdump_mod.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/diskdump_mod.h b/diskdump_mod.h
|
||||
index 267681712a2a..3733953dee12 100644
|
||||
--- a/diskdump_mod.h
|
||||
+++ b/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.23.0
|
||||
|
@ -0,0 +1,38 @@
|
||||
From 7242ae4cb5288df626f464ced0a8b60fd669100b Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Mon, 16 Mar 2020 19:39:58 +0100
|
||||
Subject: Align PMD_SECTION_MASK with PHYS_MASK
|
||||
Upstream: merged (expected 1.6.8)
|
||||
Git-commit: 7242ae4cb5288df626f464ced0a8b60fd669100b
|
||||
|
||||
Reportedly on some arm64 systems makedumpfile loops forever exhausting
|
||||
all memory when filtering kernel core. It turns out the reason is it
|
||||
cannot resolve some addresses because the PMD mask is wrong. When
|
||||
physical address mask allows up to 48bits pmd mask should allow the
|
||||
same.
|
||||
I suppose you would need a system that needs physical addresses over 1TB
|
||||
to be able to reproduce this. This may be either because you have a lot
|
||||
of memory or because the firmware mapped some memory above 1TB for some
|
||||
reason.
|
||||
|
||||
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
|
||||
---
|
||||
arch/arm64.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm64.c b/arch/arm64.c
|
||||
index 43164ccc32d4..54d60b440850 100644
|
||||
--- a/arch/arm64.c
|
||||
+++ b/arch/arm64.c
|
||||
@@ -81,7 +81,7 @@ static unsigned long kimage_voffset;
|
||||
* Remove the highest order bits that are not a part of the
|
||||
* physical address in a section
|
||||
*/
|
||||
-#define PMD_SECTION_MASK ((1UL << 40) - 1)
|
||||
+#define PMD_SECTION_MASK ((1UL << PHYS_MASK_SHIFT) - 1)
|
||||
|
||||
#define PMD_TYPE_MASK 3
|
||||
#define PMD_TYPE_SECT 1
|
||||
--
|
||||
2.23.0
|
||||
|
@ -1,24 +0,0 @@
|
||||
Subject: Align PMD_SECTION_MASK with CONFIG_ARM64_VA_BITS
|
||||
|
||||
References: bsc#1142715
|
||||
|
||||
Since SUSE 4.12 kernel the VA renge is increased to 48 bits.
|
||||
|
||||
Upstream proposed to export the VA range in vmcoreinfo but we did not backport
|
||||
the patch.
|
||||
|
||||
Link: https://lists.infradead.org/pipermail/kexec/2019-November/023966.html
|
||||
Link: https://patchwork.kernel.org/cover/11266557/
|
||||
|
||||
diff -ur makedumpfile-1.6.7.orig/arch/arm64.c makedumpfile-1.6.7/arch/arm64.c
|
||||
--- makedumpfile-1.6.7.orig/arch/arm64.c 2020-01-15 19:09:56.000000000 +0100
|
||||
+++ makedumpfile-1.6.7/arch/arm64.c 2020-03-04 14:38:02.281783810 +0100
|
||||
@@ -81,7 +81,7 @@
|
||||
* Remove the highest order bits that are not a part of the
|
||||
* physical address in a section
|
||||
*/
|
||||
-#define PMD_SECTION_MASK ((1UL << 40) - 1)
|
||||
+#define PMD_SECTION_MASK ((1UL << 48) - 1)
|
||||
|
||||
#define PMD_TYPE_MASK 3
|
||||
#define PMD_TYPE_SECT 1
|
@ -1,3 +1,17 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 3 05:51:49 UTC 2020 - Martin Liška <mliska@suse.cz>
|
||||
|
||||
- Add -fcommon in order to fix boo#1160282.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Apr 1 06:11:18 UTC 2020 - Michal Suchanek <msuchanek@suse.de>
|
||||
|
||||
- Refresh patch with upstream version
|
||||
- makedumpfile-arm64-VA-range-SUSE.patch
|
||||
+ makedumpfile-arm64-Align-PMD_SECTION_MASK-with-PHYS_MASK.patch
|
||||
- makedumpfile-Fix-cd_header-offset-overflow-with-large-pfn.patch: Fix integer
|
||||
overflow with large memory configuration (bsc#1168234).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Mar 4 13:45:23 UTC 2020 - Michal Suchanek <msuchanek@suse.com>
|
||||
|
||||
|
@ -43,7 +43,8 @@ Source99: %{name}-rpmlintrc
|
||||
Patch1: %{name}-override-libtinfo.patch
|
||||
Patch2: %{name}-ppc64-VA-range-SUSE.patch
|
||||
Patch3: %{name}-PN_XNUM.patch
|
||||
Patch4: %{name}-arm64-VA-range-SUSE.patch
|
||||
Patch4: %{name}-arm64-Align-PMD_SECTION_MASK-with-PHYS_MASK.patch
|
||||
Patch5: %{name}-Fix-cd_header-offset-overflow-with-large-pfn.patch
|
||||
BuildRequires: libdw-devel
|
||||
BuildRequires: libelf-devel
|
||||
BuildRequires: libeppic-devel
|
||||
@ -73,7 +74,7 @@ via gdb or crash utility.
|
||||
%autopatch -p1
|
||||
|
||||
%build
|
||||
export CFLAGS="%{optflags}"
|
||||
export CFLAGS="%{optflags} -fcommon"
|
||||
%if %{have_snappy}
|
||||
export USESNAPPY=on
|
||||
%endif
|
||||
|
Loading…
Reference in New Issue
Block a user