diff -Nru makedumpfile-1.6.5/debian/50-kdump-tools.rules makedumpfile-1.6.5/debian/50-kdump-tools.rules --- makedumpfile-1.6.5/debian/50-kdump-tools.rules 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/50-kdump-tools.rules 2020-01-03 13:13:47.000000000 -0300 @@ -1,4 +1,5 @@ -SUBSYSTEM=="memory", ACTION=="online", PROGRAM="/bin/systemctl try-restart kdump-tools.service" -SUBSYSTEM=="memory", ACTION=="offline", PROGRAM="/bin/systemctl try-restart kdump-tools.service" -SUBSYSTEM=="cpu", ACTION=="add", PROGRAM="/bin/systemctl try-restart kdump-tools.service" -SUBSYSTEM=="cpu", ACTION=="remove", PROGRAM="/bin/systemctl try-restart kdump-tools.service" +SUBSYSTEM=="memory", ACTION=="online", PROGRAM="/usr/sbin/kdump-config try-reload" +SUBSYSTEM=="memory", ACTION=="offline", PROGRAM="/usr/sbin/kdump-config try-reload" +SUBSYSTEM=="cpu", ACTION=="add", PROGRAM="/usr/sbin/kdump-config try-reload" +SUBSYSTEM=="cpu", ACTION=="remove", PROGRAM="/usr/sbin/kdump-config try-reload" +SUBSYSTEM=="cpu", ACTION=="online", PROGRAM="/usr/sbin/kdump-config try-reload" diff -Nru makedumpfile-1.6.5/debian/changelog makedumpfile-1.6.5/debian/changelog --- makedumpfile-1.6.5/debian/changelog 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/changelog 2020-01-03 13:21:29.000000000 -0300 @@ -1,3 +1,21 @@ +makedumpfile (1:1.6.5-1ubuntu1~18.04.4) bionic; urgency=medium + + [ Thadeu Lima de Souza Cascardo ] + * Add a reload command. (LP: #1828596) + * kdump-config: implement try-reload (LP: #1828596) + * udev: hotplug: use try-reload (LP: #1828596) + * Use reset_devices as a cmdline parameter. (LP: #1800566) + + [ Guilherme G. Piccoli ] + * Add a systemd-resolved service dependency in order to make kdump-tool + able to resolve DNS when in kdump boot. (LP: #1856323) + * x86_64: Fix 2 errors due to makedumpfile being out-of-sync with recent + kernels. To achieve that, add the following patches: "Increase + SECTION_MAP_LAST_BIT to 4" and "fix get_kaslr_offset_x86_64() to return + kaslr_offset correctly". (LP: #1857616) + + -- Guilherme G. Piccoli Fri, 03 Jan 2020 13:14:39 -0300 + makedumpfile (1:1.6.5-1ubuntu1~18.04.3) bionic; urgency=medium [ Guilherme G. Piccoli ] diff -Nru makedumpfile-1.6.5/debian/kdump-config.in makedumpfile-1.6.5/debian/kdump-config.in --- makedumpfile-1.6.5/debian/kdump-config.in 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/kdump-config.in 2020-01-03 13:13:47.000000000 -0300 @@ -65,6 +65,7 @@ sys_fadump_enabled=/sys/kernel/fadump_enabled sys_fadump_registered=/sys/kernel/fadump_registered kexec_cmd_file=$KDUMP_COREDIR/kexec_cmd +lock_file=$KDUMP_COREDIR/kdump_lock # DUMP_MODE = kdump/fadump # The default dump mode is kdump. @@ -891,7 +892,47 @@ } +load() +{ + if [ "$DUMP_MODE" == "fadump" ]; then + check_fadump_support; + fadump_register + else + check_kdump_support; + kdump_create_symlinks $KVER; + manage_symlinks; + locate_kdump_kernel; + kdump_load + fi +} +unload() +{ + if [ "$DUMP_MODE" == "fadump" ]; then + fadump_unregister + else + kdump_unload + fi +} + +reload() +{ + unload + load +} + +condreload() +{ + local sys_loaded="$sys_kexec_crash" + if [ "$DUMP_MODE" == "fadump" ] ; then + check_fadump_support + sys_loaded="$sys_fadump_registered" + fi + flock 9 + if [ -e $sys_loaded -a `cat $sys_loaded` -eq 1 ] ; then + reload + fi +} case "$1" in test) @@ -916,23 +957,16 @@ kdump_show ;; load) - if [ "$DUMP_MODE" == "fadump" ]; then - check_fadump_support; - fadump_register - else - check_kdump_support; - kdump_create_symlinks $KVER; - manage_symlinks; - locate_kdump_kernel; - kdump_load - fi + load ;; unload) - if [ "$DUMP_MODE" == "fadump" ]; then - fadump_unregister - else - kdump_unload - fi + unload + ;; + reload) + reload + ;; + condreload|try-reload) + condreload 9>$lock_file ;; status) if [ "$DUMP_MODE" == "fadump" ]; then diff -Nru makedumpfile-1.6.5/debian/kdump-tools-dump.service makedumpfile-1.6.5/debian/kdump-tools-dump.service --- makedumpfile-1.6.5/debian/kdump-tools-dump.service 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/kdump-tools-dump.service 2020-01-03 13:13:47.000000000 -0300 @@ -1,7 +1,7 @@ [Unit] Description=Kernel crash dump capture service -Wants=network-online.target -After=network-online.target +Wants=network-online.target dbus.socket systemd-resolved.service +After=network-online.target dbus.socket systemd-resolved.service [Service] Type=oneshot diff -Nru makedumpfile-1.6.5/debian/patches/0004-x86_64-fix-get_kaslr_offset_x86_64-to-return-kaslr_offset-correctly.patch makedumpfile-1.6.5/debian/patches/0004-x86_64-fix-get_kaslr_offset_x86_64-to-return-kaslr_offset-correctly.patch --- makedumpfile-1.6.5/debian/patches/0004-x86_64-fix-get_kaslr_offset_x86_64-to-return-kaslr_offset-correctly.patch 1969-12-31 21:00:00.000000000 -0300 +++ makedumpfile-1.6.5/debian/patches/0004-x86_64-fix-get_kaslr_offset_x86_64-to-return-kaslr_offset-correctly.patch 2020-01-03 13:22:31.000000000 -0300 @@ -0,0 +1,93 @@ +Author: Kazuhito Hagio +Date: Fri, 24 May 2019 12:03:13 -0400 +Subject: [PATCH] x86_64: fix get_kaslr_offset_x86_64() to return kaslr_offset correctly + +Currently, the get_kaslr_offset_x86_64() function has the following +condition to return info->kaslr_offset, but it is wrong, and it can +return 0 for kernel text addresses if info->kaslr_offset is small. + + if (vaddr >= __START_KERNEL_map && + vaddr < __START_KERNEL_map + info->kaslr_offset) + +Consequently, kernel text symbols in erase config could be resolved +wrongly, and makedumpfile fails to vtop with the following message +or erases unintended data. + + __vtop4_x86_64: Can't get a valid pmd_pte. + +To fix this, use NUMBER(KERNEL_IMAGE_SIZE) in vmcoreinfo if any, +otherwise use the hard-coded value (1 GiB) for KASLR, which has not +been changed from the initial KASLR implementation. + +Signed-off-by: Kazuhito Hagio +- +diff --git a/arch/x86_64.c b/arch/x86_64.c +index 537fb78..f28eb17 100644 +--- a/arch/x86_64.c ++++ b/arch/x86_64.c +@@ -48,6 +48,7 @@ get_kaslr_offset_x86_64(unsigned long vaddr) + { + unsigned int i; + char buf[BUFSIZE_FGETS], *endp; ++ unsigned long kernel_image_size; + + if (!info->kaslr_offset && info->file_vmcoreinfo) { + if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { +@@ -68,8 +69,16 @@ get_kaslr_offset_x86_64(unsigned long vaddr) + strtoul(buf+strlen(STR_KERNELOFFSET),&endp,16); + } + } ++ if (!info->kaslr_offset) ++ return 0; ++ ++ if (NUMBER(KERNEL_IMAGE_SIZE) != NOT_FOUND_NUMBER) ++ kernel_image_size = NUMBER(KERNEL_IMAGE_SIZE); ++ else ++ kernel_image_size = KERNEL_IMAGE_SIZE_KASLR_ORIG; ++ + if (vaddr >= __START_KERNEL_map && +- vaddr < __START_KERNEL_map + info->kaslr_offset) ++ vaddr < __START_KERNEL_map + kernel_image_size) + return info->kaslr_offset; + else + /* +diff --git a/makedumpfile.c b/makedumpfile.c +index 8923538..957cb64 100644 +--- a/makedumpfile.c ++++ b/makedumpfile.c +@@ -2288,6 +2288,7 @@ write_vmcoreinfo_data(void) + + WRITE_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE); + WRITE_NUMBER("phys_base", phys_base); ++ WRITE_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); + + WRITE_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR); + #ifdef __aarch64__ +@@ -2688,6 +2689,7 @@ read_vmcoreinfo(void) + + READ_NUMBER("PAGE_BUDDY_MAPCOUNT_VALUE", PAGE_BUDDY_MAPCOUNT_VALUE); + READ_NUMBER("phys_base", phys_base); ++ READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); + #ifdef __aarch64__ + READ_NUMBER("VA_BITS", VA_BITS); + READ_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET); +diff --git a/makedumpfile.h b/makedumpfile.h +index d49f1f1..f97275d 100644 +--- a/makedumpfile.h ++++ b/makedumpfile.h +@@ -617,6 +617,7 @@ unsigned long get_kvbase_arm64(void); + #define VMEMMAP_END_5LEVEL (0xffd5ffffffffffff) /* 5-level page table */ + + #define __START_KERNEL_map (0xffffffff80000000) ++#define KERNEL_IMAGE_SIZE_KASLR_ORIG (1024*1024*1024) /* 3.14, or later */ + #define KVBASE PAGE_OFFSET + #define _SECTION_SIZE_BITS (27) + #define _MAX_PHYSMEM_BITS_ORIG (40) +@@ -1932,6 +1933,7 @@ struct number_table { + long MAX_PHYSMEM_BITS; + long HUGETLB_PAGE_DTOR; + long phys_base; ++ long KERNEL_IMAGE_SIZE; + #ifdef __aarch64__ + long VA_BITS; + unsigned long PHYS_OFFSET; diff -Nru makedumpfile-1.6.5/debian/patches/0005-Increase-SECTION_MAP_LAST_BIT-to-4.patch makedumpfile-1.6.5/debian/patches/0005-Increase-SECTION_MAP_LAST_BIT-to-4.patch --- makedumpfile-1.6.5/debian/patches/0005-Increase-SECTION_MAP_LAST_BIT-to-4.patch 1969-12-31 21:00:00.000000000 -0300 +++ makedumpfile-1.6.5/debian/patches/0005-Increase-SECTION_MAP_LAST_BIT-to-4.patch 2020-01-03 13:22:51.000000000 -0300 @@ -0,0 +1,37 @@ +Author: Kazuhito Hagio +Date: Tue, 23 Jul 2019 12:24:47 -0400 +Subject: Increase SECTION_MAP_LAST_BIT to 4 + +kernel commit 326e1b8f83a4 ("mm/sparsemem: introduce a SECTION_IS_EARLY +flag") added the flag to mem_section->section_mem_map value, and it caused +makedumpfile an error like the following: + + readmem: Can't convert a virtual address(fffffc97d1000000) to physical address. + readmem: type_addr: 0, addr:fffffc97d1000000, size:32768 + __exclude_unnecessary_pages: Can't read the buffer of struct page. + create_2nd_bitmap: Can't exclude unnecessary pages. + +To fix this, SECTION_MAP_LAST_BIT needs to be updated. The bit has not +been used until the addition, so we can just increase the value. + +Signed-off-by: Kazuhito Hagio +--- + makedumpfile.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/makedumpfile.h b/makedumpfile.h +index 24b2f69..df745b9 100644 +--- a/makedumpfile.h ++++ b/makedumpfile.h +@@ -195,7 +195,7 @@ isAnon(unsigned long mapping) + * 2. it has been verified that (1UL<<2) was never set, so it is + * safe to mask that bit off even in old kernels. + */ +-#define SECTION_MAP_LAST_BIT (1UL<<3) ++#define SECTION_MAP_LAST_BIT (1UL<<4) + #define SECTION_MAP_MASK (~(SECTION_MAP_LAST_BIT-1)) + #define NR_SECTION_ROOTS() divideup(num_section, SECTIONS_PER_ROOT()) + #define SECTION_NR_TO_PFN(sec) ((sec) << PFN_SECTION_SHIFT()) +-- +2.24.0 + diff -Nru makedumpfile-1.6.5/debian/patches/series makedumpfile-1.6.5/debian/patches/series --- makedumpfile-1.6.5/debian/patches/series 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/patches/series 2020-01-03 13:22:51.000000000 -0300 @@ -1,3 +1,5 @@ 0001-Remove-libebl-linkage.patch 0002-adapt-makefile-to-debian.patch 0003-PATCH-ppc64-increase-MAX_PHYSMEM_BITS-to-2PB.patch +0004-x86_64-fix-get_kaslr_offset_x86_64-to-return-kaslr_offset-correctly.patch +0005-Increase-SECTION_MAP_LAST_BIT-to-4.patch diff -Nru makedumpfile-1.6.5/debian/rules makedumpfile-1.6.5/debian/rules --- makedumpfile-1.6.5/debian/rules 2019-10-09 15:38:08.000000000 -0300 +++ makedumpfile-1.6.5/debian/rules 2020-01-03 13:13:47.000000000 -0300 @@ -7,7 +7,7 @@ SUBSTVARS = -Vdist:Depends="kexec-tools" endif -KDUMP_CMDLINE_APPEND = systemd.unit=kdump-tools-dump.service +KDUMP_CMDLINE_APPEND = reset_devices systemd.unit=kdump-tools-dump.service ifeq ($(DEB_HOST_ARCH),arm64) KDUMP_CMDLINE_APPEND += nr_cpus=1 else ifeq ($(DEB_HOST_ARCH),ppc64el)