This patch set updates makedumpfile to latest upstream(a8250642a4ff50a2), and kexec-tools to v2.0.22.
Tao Liu (2): Update makedumpfile to latest upstream(a8250642a4ff50a2) Update kexec-tools to 2.0.22
...edumpfile-Add-initial-mips64-support.patch | 246 ++++++++++++++++++ ...kefile-Fix-a-compile-error-on-Debian.patch | 31 +++ ...mcoreinfo-note-in-proc-kcore-for-mem.patch | 146 +++++++++++ ...Make-use-of-NUMBER-VA_BITS-in-vmcore.patch | 101 +++++++ ...support-flipped-VA-and-52-bit-kernel.patch | 245 +++++++++++++++++ ...21-makedumpfile-fix-build-on-sparc64.patch | 33 +++ ...rieve-MAX_PHYSMEM_BITS-from-vmcorein.patch | 42 +++ ...fix-a-use-after-free-bug-in-e-option.patch | 42 +++ kexec-tools.spec | 20 +- sources | 2 +- 10 files changed, 905 insertions(+), 3 deletions(-) create mode 100644 kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch
Signed-off-by: Tao Liu ltao@redhat.com --- ...edumpfile-Add-initial-mips64-support.patch | 246 ++++++++++++++++++ ...kefile-Fix-a-compile-error-on-Debian.patch | 31 +++ ...mcoreinfo-note-in-proc-kcore-for-mem.patch | 146 +++++++++++ ...Make-use-of-NUMBER-VA_BITS-in-vmcore.patch | 101 +++++++ ...support-flipped-VA-and-52-bit-kernel.patch | 245 +++++++++++++++++ ...21-makedumpfile-fix-build-on-sparc64.patch | 33 +++ ...rieve-MAX_PHYSMEM_BITS-from-vmcorein.patch | 42 +++ ...fix-a-use-after-free-bug-in-e-option.patch | 42 +++ kexec-tools.spec | 18 +- 9 files changed, 903 insertions(+), 1 deletion(-) create mode 100644 kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch create mode 100644 kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch
diff --git a/kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch b/kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch new file mode 100644 index 0000000..fc178ba --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch @@ -0,0 +1,246 @@ +From 7f185d29aa1794a82a090c748aae2f7bf240fb49 Mon Sep 17 00:00:00 2001 +From: Youling Tang tangyouling@loongson.cn +Date: Fri, 29 Jan 2021 16:27:03 +0800 +Subject: [PATCH 03/10] [PATCH v2] Add initial mips64 support + +Patch adds support for mips64 in makedumpfile. It takes care of vmalloc, +module and directly map kernel memory region's translation. Currently we +only support 3 leverl 16K pages and VA_BITS as 48. + +The changes were tested on a mips64 Loongson-3A4000 processor. The dump +compression and filtering (for all dump levels 1,2,4,8,16 and 31) tests +are succussfull. + +Signed-off-by: Huacai Chen chenhuacai@loongson.cn +Signed-off-by: Jinyang He hejinyang@loongson.cn +Signed-off-by: Youling Tang tangyouling@loongson.cn +--- + Makefile | 2 +- + arch/mips64.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++ + makedumpfile.h | 55 ++++++++++++++++++++++ + 3 files changed, 177 insertions(+), 1 deletion(-) + create mode 100644 arch/mips64.c + +diff --git a/makedumpfile-1.6.8/Makefile b/makedumpfile-1.6.8/Makefile +index 010d447..f71bedf 100644 +--- a/makedumpfile-1.6.8/Makefile ++++ b/makedumpfile-1.6.8/Makefile +@@ -47,7 +47,7 @@ endif + SRC_BASE = makedumpfile.c makedumpfile.h diskdump_mod.h sadump_mod.h sadump_info.h + SRC_PART = print_info.c dwarf_info.c elf_info.c erase_info.c sadump_info.c cache.c tools.c printk.c + OBJ_PART=$(patsubst %.c,%.o,$(SRC_PART)) +-SRC_ARCH = arch/arm.c arch/arm64.c arch/x86.c arch/x86_64.c arch/ia64.c arch/ppc64.c arch/s390x.c arch/ppc.c arch/sparc64.c ++SRC_ARCH = arch/arm.c arch/arm64.c arch/x86.c arch/x86_64.c arch/ia64.c arch/ppc64.c arch/s390x.c arch/ppc.c arch/sparc64.c arch/mips64.c + OBJ_ARCH=$(patsubst %.c,%.o,$(SRC_ARCH)) + + LIBS = -ldw -lbz2 -ldl -lelf -lz +diff --git a/makedumpfile-1.6.8/arch/mips64.c b/makedumpfile-1.6.8/arch/mips64.c +new file mode 100644 +index 0000000..c968082 +--- /dev/null ++++ b/makedumpfile-1.6.8/arch/mips64.c +@@ -0,0 +1,121 @@ ++/* ++ * mips64.c ++ * ++ * Copyright (C) 2021 Loongson Technology Co., Ltd. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation (version 2 of the License). ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++#ifdef __mips64__ ++ ++#include "../print_info.h" ++#include "../elf_info.h" ++#include "../makedumpfile.h" ++ ++int ++get_phys_base_mips64(void) ++{ ++ info->phys_base = 0ULL; ++ ++ DEBUG_MSG("phys_base : %lx\n", info->phys_base); ++ ++ return TRUE; ++} ++ ++int ++get_machdep_info_mips64(void) ++{ ++ info->max_physmem_bits = _MAX_PHYSMEM_BITS; ++ info->section_size_bits = _SECTION_SIZE_BITS; ++ ++ DEBUG_MSG("max_physmem_bits : %lx\n", info->max_physmem_bits); ++ DEBUG_MSG("section_size_bits: %lx\n", info->section_size_bits); ++ ++ return TRUE; ++} ++ ++int ++get_versiondep_info_mips64(void) ++{ ++ info->page_offset = 0x9800000000000000ULL; ++ ++ DEBUG_MSG("page_offset : %lx\n", info->page_offset); ++ ++ return TRUE; ++} ++ ++/* ++ * Translate a virtual address to a physical address by using 3 levels paging. ++ */ ++unsigned long long ++vaddr_to_paddr_mips64(unsigned long vaddr) ++{ ++ unsigned long long paddr = NOT_PADDR; ++ pgd_t *pgda, pgdv; ++ pmd_t *pmda, pmdv; ++ pte_t *ptea, ptev; ++ ++ /* ++ * CKSEG0/CKSEG1 ++ */ ++ if (vaddr >= 0xffffffff80000000ULL && vaddr < 0xffffffffc0000000ULL) ++ return vaddr & 0x1fffffffULL; ++ ++ /* ++ * XKPHYS ++ */ ++ if (vaddr >= 0x9000000000000000ULL && vaddr < 0xc000000000000000ULL) ++ return vaddr & ((1ULL << MAX_PHYSMEM_BITS()) - 1); ++ ++ if (SYMBOL(swapper_pg_dir) == NOT_FOUND_SYMBOL) { ++ ERRMSG("Can't get the symbol of swapper_pg_dir.\n"); ++ return NOT_PADDR; ++ } ++ ++ pgda = pgd_offset(SYMBOL(swapper_pg_dir), vaddr); ++ if (!readmem(PADDR, (unsigned long long)pgda, &pgdv, sizeof(pgdv))) { ++ ERRMSG("Can't read pgd\n"); ++ return NOT_PADDR; ++ } ++ ++ pmda = pmd_offset(&pgdv, vaddr); ++ if (!readmem(PADDR, (unsigned long long)pmda, &pmdv, sizeof(pmdv))) { ++ ERRMSG("Can't read pmd\n"); ++ return NOT_PADDR; ++ } ++ ++ switch (pmdv & (_PAGE_PRESENT|_PAGE_HUGE)) { ++ case _PAGE_PRESENT: ++ ptea = pte_offset(&pmdv, vaddr); ++ /* 64k page */ ++ if (!readmem(PADDR, (unsigned long long)ptea, &ptev, sizeof(ptev))) { ++ ERRMSG("Can't read pte\n"); ++ return NOT_PADDR; ++ } ++ ++ if (!(ptev & _PAGE_PRESENT)) { ++ ERRMSG("Can't get a valid pte.\n"); ++ return NOT_PADDR; ++ } else { ++ paddr = PAGEBASE(ptev) + (vaddr & (PAGESIZE() - 1)); ++ } ++ break; ++ case _PAGE_PRESENT|_PAGE_HUGE: ++ paddr = (pmdv & PMD_MASK) + (vaddr & (PMD_SIZE - 1)); ++ break; ++ } ++ ++ return paddr; ++} ++ ++#endif /* mips64 */ +diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h +index 2fcb62e..0ed6417 100644 +--- a/makedumpfile-1.6.8/makedumpfile.h ++++ b/makedumpfile-1.6.8/makedumpfile.h +@@ -958,6 +958,39 @@ typedef unsigned long pgd_t; + + #endif /* sparc64 */ + ++#ifdef __mips64__ /* mips64 */ ++#define KVBASE PAGE_OFFSET ++#define _SECTION_SIZE_BITS (28) ++#define _MAX_PHYSMEM_BITS (48) ++#define _PAGE_PRESENT (1 << 0) ++#define _PAGE_HUGE (1 << 4) ++ ++typedef unsigned long pte_t; ++typedef unsigned long pmd_t; ++typedef unsigned long pgd_t; ++ ++#define PAGE_MASK (~(PAGESIZE() - 1)) ++#define PMD_MASK (~(PMD_SIZE - 1)) ++#define PMD_SHIFT ((PAGESHIFT() - 3) * 2 + 3) ++#define PMD_SIZE (1UL << PMD_SHIFT) ++#define PGDIR_SHIFT ((PAGESHIFT() - 3) * 3 + 3) ++#define PTRS_PER_PTE (1 << (PAGESHIFT() - 3)) ++#define PTRS_PER_PMD PTRS_PER_PTE ++#define PTRS_PER_PGD PTRS_PER_PTE ++ ++#define pte_index(vaddr) (((vaddr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) ++#define pmd_page_paddr(pmd) (pmd & (int32_t)PAGE_MASK) ++#define pte_offset(dir, vaddr) ((pte_t *)pmd_page_paddr((*dir)) + pte_index(vaddr)) ++ ++#define pmd_index(vaddr) (((vaddr) >> PMD_SHIFT) & (PTRS_PER_PMD - 1)) ++#define pgd_page_paddr(pgd) (pgd & (int32_t)PAGE_MASK) ++#define pmd_offset(pgd, vaddr) ((pmd_t *)pgd_page_paddr((*pgd)) + pmd_index(vaddr)) ++ ++#define pgd_index(vaddr) (((vaddr) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)) ++#define pgd_offset(pgdir, vaddr) ((pgd_t *)(pgdir) + pgd_index(vaddr)) ++ ++#endif /* mips64 */ ++ + /* + * The function of dependence on machine + */ +@@ -1112,6 +1145,22 @@ unsigned long long vaddr_to_paddr_sparc64(unsigned long vaddr); + #define arch_crashkernel_mem_size() stub_false() + #endif /* sparc64 */ + ++#ifdef __mips64__ /* mips64 */ ++int get_phys_base_mips64(void); ++int get_machdep_info_mips64(void); ++int get_versiondep_info_mips64(void); ++unsigned long long vaddr_to_paddr_mips64(unsigned long vaddr); ++#define find_vmemmap() stub_false() ++#define get_phys_base() get_phys_base_mips64() ++#define get_machdep_info() get_machdep_info_mips64() ++#define get_versiondep_info() get_versiondep_info_mips64() ++#define get_kaslr_offset(X) stub_false() ++#define vaddr_to_paddr(X) vaddr_to_paddr_mips64(X) ++#define paddr_to_vaddr(X) paddr_to_vaddr_general(X) ++#define is_phys_addr(X) stub_true_ul(X) ++#define arch_crashkernel_mem_size() stub_false() ++#endif /* mips64 */ ++ + typedef unsigned long long mdf_pfn_t; + + #ifndef ARCH_PFN_OFFSET +@@ -2229,6 +2278,12 @@ int get_xen_info_ia64(void); + #define get_xen_info_arch(X) FALSE + #endif /* sparc64 */ + ++#ifdef __mips64__ /* mips64 */ ++#define kvtop_xen(X) FALSE ++#define get_xen_basic_info_arch(X) FALSE ++#define get_xen_info_arch(X) FALSE ++#endif /* mips64 */ ++ + struct cycle { + mdf_pfn_t start_pfn; + mdf_pfn_t end_pfn; +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch b/kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch new file mode 100644 index 0000000..a2e607c --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch @@ -0,0 +1,31 @@ +From 01b4bd354c4a845c160d14487a93270cd1e22031 Mon Sep 17 00:00:00 2001 +From: Jiang Wang jiang.wang@bytedance.com +Date: Sat, 30 Jan 2021 18:49:20 +0000 +Subject: [PATCH 02/10] [PATCH] Makefile: Fix a compile error on Debian with + pthread + +On Debian 10, "make" reports errors about undefined reference to +`pthread_rwlock_tryrdlock'. To fix it, put -ldw before -lpthread +in the Makefile. + +Signed-off-by: Jiang Wang jiang.wang@bytedance.com +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/makedumpfile-1.6.8/Makefile b/makedumpfile-1.6.8/Makefile +index cb6bd42..010d447 100644 +--- a/makedumpfile-1.6.8/Makefile ++++ b/makedumpfile-1.6.8/Makefile +@@ -68,7 +68,7 @@ endif + CFLAGS += -DUSESNAPPY + endif + +-LIBS := -lpthread $(LIBS) ++LIBS := $(LIBS) -lpthread + + try-run = $(shell set -e; \ + TMP=".$$$$.tmp"; \ +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch b/kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch new file mode 100644 index 0000000..1290ec9 --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch @@ -0,0 +1,146 @@ +From d8b701796f0491f2ac4b06c7a5b795c29399efab Mon Sep 17 00:00:00 2001 +From: Kazuhito Hagio k-hagio-ab@nec.com +Date: Fri, 29 Jan 2021 11:40:23 +0900 +Subject: [PATCH 04/10] [PATCH 1/3] Use vmcoreinfo note in /proc/kcore for + --mem-usage option + +kernel commit 23c85094fe18 added vmcoreinfo note to /proc/kcore. +Use the vmcoreinfo note to get necessary information, especially +page_offset and phys_base on arm64, for the --mem-usage option. + +Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com +--- + elf_info.c | 49 ------------------------------------------------- + elf_info.h | 1 - + makedumpfile.c | 26 +++++++++++++++++++++----- + 3 files changed, 21 insertions(+), 55 deletions(-) + +diff --git a/makedumpfile-1.6.8/elf_info.c b/makedumpfile-1.6.8/elf_info.c +index a6624b5..e8affb7 100644 +--- a/makedumpfile-1.6.8/elf_info.c ++++ b/makedumpfile-1.6.8/elf_info.c +@@ -698,55 +698,6 @@ get_elf32_ehdr(int fd, char *filename, Elf32_Ehdr *ehdr) + return TRUE; + } + +-int +-get_elf_loads(int fd, char *filename) +-{ +- int i, j, phnum, elf_format; +- Elf64_Phdr phdr; +- +- /* +- * Check ELF64 or ELF32. +- */ +- elf_format = check_elf_format(fd, filename, &phnum, &num_pt_loads); +- if (elf_format == ELF64) +- flags_memory |= MEMORY_ELF64; +- else if (elf_format != ELF32) +- return FALSE; +- +- if (!num_pt_loads) { +- ERRMSG("Can't get the number of PT_LOAD.\n"); +- return FALSE; +- } +- +- /* +- * The below file information will be used as /proc/vmcore. +- */ +- fd_memory = fd; +- name_memory = filename; +- +- pt_loads = calloc(sizeof(struct pt_load_segment), num_pt_loads); +- if (pt_loads == NULL) { +- ERRMSG("Can't allocate memory for the PT_LOAD. %s\n", +- strerror(errno)); +- return FALSE; +- } +- for (i = 0, j = 0; i < phnum; i++) { +- if (!get_phdr_memory(i, &phdr)) +- return FALSE; +- +- if (phdr.p_type != PT_LOAD) +- continue; +- +- if (j >= num_pt_loads) +- return FALSE; +- if (!dump_Elf_load(&phdr, j)) +- return FALSE; +- j++; +- } +- +- return TRUE; +-} +- + static int exclude_segment(struct pt_load_segment **pt_loads, + unsigned int *num_pt_loads, uint64_t start, uint64_t end) + { +diff --git a/makedumpfile-1.6.8/elf_info.h b/makedumpfile-1.6.8/elf_info.h +index d9b5d05..d5416b3 100644 +--- a/makedumpfile-1.6.8/elf_info.h ++++ b/makedumpfile-1.6.8/elf_info.h +@@ -44,7 +44,6 @@ int get_elf64_ehdr(int fd, char *filename, Elf64_Ehdr *ehdr); + int get_elf32_ehdr(int fd, char *filename, Elf32_Ehdr *ehdr); + int get_elf_info(int fd, char *filename); + void free_elf_info(void); +-int get_elf_loads(int fd, char *filename); + int set_kcore_vmcoreinfo(uint64_t vmcoreinfo_addr, uint64_t vmcoreinfo_len); + int get_kcore_dump_loads(void); + +diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c +index ba0003a..768eda4 100644 +--- a/makedumpfile-1.6.8/makedumpfile.c ++++ b/makedumpfile-1.6.8/makedumpfile.c +@@ -11445,6 +11445,7 @@ int show_mem_usage(void) + { + uint64_t vmcoreinfo_addr, vmcoreinfo_len; + struct cycle cycle = {0}; ++ int vmcoreinfo = FALSE; + + if (!is_crashkernel_mem_reserved()) { + ERRMSG("No memory is reserved for crashkernel!\n"); +@@ -11456,9 +11457,22 @@ int show_mem_usage(void) + if (!open_files_for_creating_dumpfile()) + return FALSE; + +- if (!get_elf_loads(info->fd_memory, info->name_memory)) ++ if (!get_elf_info(info->fd_memory, info->name_memory)) + return FALSE; + ++ /* ++ * /proc/kcore on Linux 4.19 and later kernels have vmcoreinfo note in ++ * NOTE segment. See commit 23c85094fe18. ++ */ ++ if (has_vmcoreinfo()) { ++ off_t offset; ++ unsigned long size; ++ ++ get_vmcoreinfo(&offset, &size); ++ vmcoreinfo = read_vmcoreinfo_from_vmcore(offset, size, FALSE); ++ DEBUG_MSG("Read vmcoreinfo from NOTE segment: %d\n", vmcoreinfo); ++ } ++ + if (!get_page_offset()) + return FALSE; + +@@ -11466,11 +11480,13 @@ int show_mem_usage(void) + if (!get_phys_base()) + return FALSE; + +- if (!get_sys_kernel_vmcoreinfo(&vmcoreinfo_addr, &vmcoreinfo_len)) +- return FALSE; ++ if (!vmcoreinfo) { ++ if (!get_sys_kernel_vmcoreinfo(&vmcoreinfo_addr, &vmcoreinfo_len)) ++ return FALSE; + +- if (!set_kcore_vmcoreinfo(vmcoreinfo_addr, vmcoreinfo_len)) +- return FALSE; ++ if (!set_kcore_vmcoreinfo(vmcoreinfo_addr, vmcoreinfo_len)) ++ return FALSE; ++ } + + if (!initial()) + return FALSE; +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch b/kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch new file mode 100644 index 0000000..c5b1acc --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch @@ -0,0 +1,101 @@ +From 67d0e1d68f28c567a704fd6b9b8fd696ad3df183 Mon Sep 17 00:00:00 2001 +From: Kazuhito Hagio k-hagio-ab@nec.com +Date: Fri, 29 Jan 2021 11:40:24 +0900 +Subject: [PATCH 05/10] [PATCH 2/3] arm64: Make use of NUMBER(VA_BITS) in + vmcoreinfo + +Make use of the NUMBER(VA_BITS) in vmcoreinfo, which was added by +kernel commit 20a166243328 (Linux 4.12 and later kernels), as the +current way of guessing VA_BITS does not work on Linux 5.4 and +later kernels. + +Signed-off-by: Bhupesh Sharma bhsharma@redhat.com +Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com +--- + arch/arm64.c | 63 ++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 42 insertions(+), 21 deletions(-) + +diff --git a/makedumpfile-1.6.8/arch/arm64.c b/makedumpfile-1.6.8/arch/arm64.c +index 3d7b416..2916b4f 100644 +--- a/makedumpfile-1.6.8/arch/arm64.c ++++ b/makedumpfile-1.6.8/arch/arm64.c +@@ -345,6 +345,43 @@ get_stext_symbol(void) + return(found ? kallsym : FALSE); + } + ++static int ++get_va_bits_from_stext_arm64(void) ++{ ++ ulong _stext; ++ ++ _stext = get_stext_symbol(); ++ if (!_stext) { ++ ERRMSG("Can't get the symbol of _stext.\n"); ++ return FALSE; ++ } ++ ++ /* ++ * Derive va_bits as per arch/arm64/Kconfig. Note that this is a ++ * best case approximation at the moment, as there can be ++ * inconsistencies in this calculation (for e.g., for 52-bit ++ * kernel VA case, the 48th bit is set in * the _stext symbol). ++ */ ++ if ((_stext & PAGE_OFFSET_48) == PAGE_OFFSET_48) { ++ va_bits = 48; ++ } else if ((_stext & PAGE_OFFSET_47) == PAGE_OFFSET_47) { ++ va_bits = 47; ++ } else if ((_stext & PAGE_OFFSET_42) == PAGE_OFFSET_42) { ++ va_bits = 42; ++ } else if ((_stext & PAGE_OFFSET_39) == PAGE_OFFSET_39) { ++ va_bits = 39; ++ } else if ((_stext & PAGE_OFFSET_36) == PAGE_OFFSET_36) { ++ va_bits = 36; ++ } else { ++ ERRMSG("Cannot find a proper _stext for calculating VA_BITS\n"); ++ return FALSE; ++ } ++ ++ DEBUG_MSG("va_bits : %d (guess from _stext)\n", va_bits); ++ ++ return TRUE; ++} ++ + int + get_machdep_info_arm64(void) + { +@@ -398,27 +435,11 @@ get_xen_info_arm64(void) + int + get_versiondep_info_arm64(void) + { +- ulong _stext; +- +- _stext = get_stext_symbol(); +- if (!_stext) { +- ERRMSG("Can't get the symbol of _stext.\n"); +- return FALSE; +- } +- +- /* Derive va_bits as per arch/arm64/Kconfig */ +- if ((_stext & PAGE_OFFSET_36) == PAGE_OFFSET_36) { +- va_bits = 36; +- } else if ((_stext & PAGE_OFFSET_39) == PAGE_OFFSET_39) { +- va_bits = 39; +- } else if ((_stext & PAGE_OFFSET_42) == PAGE_OFFSET_42) { +- va_bits = 42; +- } else if ((_stext & PAGE_OFFSET_47) == PAGE_OFFSET_47) { +- va_bits = 47; +- } else if ((_stext & PAGE_OFFSET_48) == PAGE_OFFSET_48) { +- va_bits = 48; +- } else { +- ERRMSG("Cannot find a proper _stext for calculating VA_BITS\n"); ++ if (NUMBER(VA_BITS) != NOT_FOUND_NUMBER) { ++ va_bits = NUMBER(VA_BITS); ++ DEBUG_MSG("va_bits : %d (vmcoreinfo)\n", va_bits); ++ } else if (get_va_bits_from_stext_arm64() == FALSE) { ++ ERRMSG("Can't determine va_bits.\n"); + return FALSE; + } + +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch b/kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch new file mode 100644 index 0000000..b3e169f --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch @@ -0,0 +1,245 @@ +From a0216b678a95f099a16172cc4a67ad5aa6a89583 Mon Sep 17 00:00:00 2001 +From: Kazuhito Hagio k-hagio-ab@nec.com +Date: Fri, 29 Jan 2021 11:40:25 +0900 +Subject: [PATCH 06/10] [PATCH 3/3] arm64: support flipped VA and 52-bit kernel + VA + +Linux 5.4 and later kernels for arm64 changed the kernel VA space +arrangement and introduced 52-bit kernel VAs by merging branch +commit b333b0ba2346. Support 5.9+ kernels with vmcoreinfo entries +and 5.4+ kernels with best guessing. + +However, the following conditions are not supported for now due to +no necessary information provided from kernel: +(1) 5.4 <= kernels <= 5.8 and + - if PA_BITS=52 && VA_BITS!=52 + - with -x option if vabits_actual=52 +(2) kernels < 5.4 with CONFIG_ARM64_USER_VA_BITS_52=y + +(1) should be supported with kernel commit bbdbc11804ff and +1d50e5d0c5052 adding necessary information to vmcoreinfo. + +Signed-off-by: Bhupesh Sharma bhsharma@redhat.com +Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com +Reviewed-by: Pingfan Liu piliu@redhat.com +--- + arch/arm64.c | 100 +++++++++++++++++++++++++++++++++++++++++-------- + makedumpfile.c | 2 + + makedumpfile.h | 1 + + 3 files changed, 88 insertions(+), 15 deletions(-) + +diff --git a/makedumpfile-1.6.8/arch/arm64.c b/makedumpfile-1.6.8/arch/arm64.c +index 2916b4f..1072178 100644 +--- a/makedumpfile-1.6.8/arch/arm64.c ++++ b/makedumpfile-1.6.8/arch/arm64.c +@@ -47,6 +47,8 @@ typedef struct { + static int lpa_52_bit_support_available; + static int pgtable_level; + static int va_bits; ++static int vabits_actual; ++static int flipped_va; + static unsigned long kimage_voffset; + + #define SZ_4K 4096 +@@ -58,7 +60,6 @@ static unsigned long kimage_voffset; + #define PAGE_OFFSET_42 ((0xffffffffffffffffUL) << 42) + #define PAGE_OFFSET_47 ((0xffffffffffffffffUL) << 47) + #define PAGE_OFFSET_48 ((0xffffffffffffffffUL) << 48) +-#define PAGE_OFFSET_52 ((0xffffffffffffffffUL) << 52) + + #define pgd_val(x) ((x).pgd) + #define pud_val(x) (pgd_val((x).pgd)) +@@ -218,12 +219,20 @@ pmd_page_paddr(pmd_t pmd) + #define pte_index(vaddr) (((vaddr) >> PAGESHIFT()) & (PTRS_PER_PTE - 1)) + #define pte_offset(dir, vaddr) (pmd_page_paddr((*dir)) + pte_index(vaddr) * sizeof(pte_t)) + ++/* ++ * The linear kernel range starts at the bottom of the virtual address ++ * space. Testing the top bit for the start of the region is a ++ * sufficient check and avoids having to worry about the tag. ++ */ ++#define is_linear_addr(addr) (flipped_va ? \ ++ (!((unsigned long)(addr) & (1UL << (vabits_actual - 1)))) : \ ++ (!!((unsigned long)(addr) & (1UL << (vabits_actual - 1))))) ++ + static unsigned long long + __pa(unsigned long vaddr) + { +- if (kimage_voffset == NOT_FOUND_NUMBER || +- (vaddr >= PAGE_OFFSET)) +- return (vaddr - PAGE_OFFSET + info->phys_base); ++ if (kimage_voffset == NOT_FOUND_NUMBER || is_linear_addr(vaddr)) ++ return ((vaddr & ~PAGE_OFFSET) + info->phys_base); + else + return (vaddr - kimage_voffset); + } +@@ -253,6 +262,7 @@ static int calculate_plat_config(void) + (PAGESIZE() == SZ_64K && va_bits == 42)) { + pgtable_level = 2; + } else if ((PAGESIZE() == SZ_64K && va_bits == 48) || ++ (PAGESIZE() == SZ_64K && va_bits == 52) || + (PAGESIZE() == SZ_4K && va_bits == 39) || + (PAGESIZE() == SZ_16K && va_bits == 47)) { + pgtable_level = 3; +@@ -263,6 +273,7 @@ static int calculate_plat_config(void) + PAGESIZE(), va_bits); + return FALSE; + } ++ DEBUG_MSG("pgtable_level: %d\n", pgtable_level); + + return TRUE; + } +@@ -270,6 +281,9 @@ static int calculate_plat_config(void) + unsigned long + get_kvbase_arm64(void) + { ++ if (flipped_va) ++ return PAGE_OFFSET; ++ + return (0xffffffffffffffffUL << va_bits); + } + +@@ -382,22 +396,54 @@ get_va_bits_from_stext_arm64(void) + return TRUE; + } + ++static void ++get_page_offset_arm64(void) ++{ ++ ulong page_end; ++ int vabits_min; ++ ++ /* ++ * See arch/arm64/include/asm/memory.h for more details of ++ * the PAGE_OFFSET calculation. ++ */ ++ vabits_min = (va_bits > 48) ? 48 : va_bits; ++ page_end = -(1UL << (vabits_min - 1)); ++ ++ if (SYMBOL(_stext) > page_end) { ++ flipped_va = TRUE; ++ info->page_offset = -(1UL << vabits_actual); ++ } else { ++ flipped_va = FALSE; ++ info->page_offset = -(1UL << (vabits_actual - 1)); ++ } ++ ++ DEBUG_MSG("page_offset : %lx (from page_end check)\n", ++ info->page_offset); ++} ++ + int + get_machdep_info_arm64(void) + { ++ /* Check if va_bits is still not initialized. If still 0, call ++ * get_versiondep_info() to initialize the same. ++ */ ++ if (!va_bits) ++ get_versiondep_info_arm64(); ++ + /* Determine if the PA address range is 52-bits: ARMv8.2-LPA */ + if (NUMBER(MAX_PHYSMEM_BITS) != NOT_FOUND_NUMBER) { + info->max_physmem_bits = NUMBER(MAX_PHYSMEM_BITS); ++ DEBUG_MSG("max_physmem_bits : %ld (vmcoreinfo)\n", info->max_physmem_bits); + if (info->max_physmem_bits == 52) + lpa_52_bit_support_available = 1; +- } else +- info->max_physmem_bits = 48; ++ } else { ++ if (va_bits == 52) ++ info->max_physmem_bits = 52; /* just guess */ ++ else ++ info->max_physmem_bits = 48; + +- /* Check if va_bits is still not initialized. If still 0, call +- * get_versiondep_info() to initialize the same. +- */ +- if (!va_bits) +- get_versiondep_info_arm64(); ++ DEBUG_MSG("max_physmem_bits : %ld (guess)\n", info->max_physmem_bits); ++ } + + if (!calculate_plat_config()) { + ERRMSG("Can't determine platform config values\n"); +@@ -408,7 +454,6 @@ get_machdep_info_arm64(void) + info->section_size_bits = SECTIONS_SIZE_BITS; + + DEBUG_MSG("kimage_voffset : %lx\n", kimage_voffset); +- DEBUG_MSG("max_physmem_bits : %ld\n", info->max_physmem_bits); + DEBUG_MSG("section_size_bits: %ld\n", info->section_size_bits); + + return TRUE; +@@ -443,10 +488,35 @@ get_versiondep_info_arm64(void) + return FALSE; + } + +- info->page_offset = (0xffffffffffffffffUL) << (va_bits - 1); ++ /* ++ * See TCR_EL1, Translation Control Register (EL1) register ++ * description in the ARMv8 Architecture Reference Manual. ++ * Basically, we can use the TCR_EL1.T1SZ value to determine ++ * the virtual addressing range supported in the kernel-space ++ * (i.e. vabits_actual) since Linux 5.9. ++ */ ++ if (NUMBER(TCR_EL1_T1SZ) != NOT_FOUND_NUMBER) { ++ vabits_actual = 64 - NUMBER(TCR_EL1_T1SZ); ++ DEBUG_MSG("vabits_actual : %d (vmcoreinfo)\n", vabits_actual); ++ } else if ((va_bits == 52) && (SYMBOL(mem_section) != NOT_FOUND_SYMBOL)) { ++ /* ++ * Linux 5.4 through 5.10 have the following linear space: ++ * 48-bit: 0xffff000000000000 - 0xffff7fffffffffff ++ * 52-bit: 0xfff0000000000000 - 0xfff7ffffffffffff ++ * and SYMBOL(mem_section) should be in linear space if ++ * the kernel is configured with COMFIG_SPARSEMEM_EXTREME=y. ++ */ ++ if (SYMBOL(mem_section) & (1UL << (va_bits - 1))) ++ vabits_actual = 48; ++ else ++ vabits_actual = 52; ++ DEBUG_MSG("vabits_actual : %d (guess from mem_section)\n", vabits_actual); ++ } else { ++ vabits_actual = va_bits; ++ DEBUG_MSG("vabits_actual : %d (same as va_bits)\n", vabits_actual); ++ } + +- DEBUG_MSG("va_bits : %d\n", va_bits); +- DEBUG_MSG("page_offset : %lx\n", info->page_offset); ++ get_page_offset_arm64(); + + return TRUE; + } +diff --git a/makedumpfile-1.6.8/makedumpfile.c b/makedumpfile-1.6.8/makedumpfile.c +index 768eda4..fcd766b 100644 +--- a/makedumpfile-1.6.8/makedumpfile.c ++++ b/makedumpfile-1.6.8/makedumpfile.c +@@ -2397,6 +2397,7 @@ write_vmcoreinfo_data(void) + WRITE_NUMBER("HUGETLB_PAGE_DTOR", HUGETLB_PAGE_DTOR); + #ifdef __aarch64__ + WRITE_NUMBER("VA_BITS", VA_BITS); ++ /* WRITE_NUMBER("TCR_EL1_T1SZ", TCR_EL1_T1SZ); should not exists */ + WRITE_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET); + WRITE_NUMBER_UNSIGNED("kimage_voffset", kimage_voffset); + #endif +@@ -2836,6 +2837,7 @@ read_vmcoreinfo(void) + READ_NUMBER("KERNEL_IMAGE_SIZE", KERNEL_IMAGE_SIZE); + #ifdef __aarch64__ + READ_NUMBER("VA_BITS", VA_BITS); ++ READ_NUMBER("TCR_EL1_T1SZ", TCR_EL1_T1SZ); + READ_NUMBER_UNSIGNED("PHYS_OFFSET", PHYS_OFFSET); + READ_NUMBER_UNSIGNED("kimage_voffset", kimage_voffset); + #endif +diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h +index 0ed6417..97a5554 100644 +--- a/makedumpfile-1.6.8/makedumpfile.h ++++ b/makedumpfile-1.6.8/makedumpfile.h +@@ -2049,6 +2049,7 @@ struct number_table { + long KERNEL_IMAGE_SIZE; + #ifdef __aarch64__ + long VA_BITS; ++ long TCR_EL1_T1SZ; + unsigned long PHYS_OFFSET; + unsigned long kimage_voffset; + #endif +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch b/kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch new file mode 100644 index 0000000..dcc1224 --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch @@ -0,0 +1,33 @@ +From f8348d3efa53c14c73a8f05c495680b7af2a7fe6 Mon Sep 17 00:00:00 2001 +From: Fabrice Fontaine fontaine.fabrice@gmail.com +Date: Thu, 4 Feb 2021 20:27:53 +0100 +Subject: [PATCH 08/10] [PATCH] fix build on sparc64 + +Fix the following build failure on sparc64: + +... sparc64-buildroot-linux-gnu/bin/ld: /tmp/ccylTux8.o: in function `find_kaslr_offsets': +... makedumpfile-1.6.8/makedumpfile.c:4017: undefined reference to `get_kaslr_offset' + +Fixes: + - http://autobuild.buildroot.org/results/1421f54f7599bba62c0a4bd5c65ce21c8cc7e... + +Signed-off-by: Fabrice Fontaine fontaine.fabrice@gmail.com +--- + makedumpfile.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/makedumpfile-1.6.8/makedumpfile.h b/makedumpfile-1.6.8/makedumpfile.h +index 97a5554..dfc1a77 100644 +--- a/makedumpfile-1.6.8/makedumpfile.h ++++ b/makedumpfile-1.6.8/makedumpfile.h +@@ -1139,6 +1139,7 @@ unsigned long long vaddr_to_paddr_sparc64(unsigned long vaddr); + #define get_machdep_info() TRUE + #define get_phys_base() get_phys_base_sparc64() + #define get_versiondep_info() get_versiondep_info_sparc64() ++#define get_kaslr_offset(X) stub_false() + #define vaddr_to_paddr(X) vaddr_to_paddr_sparc64(X) + #define paddr_to_vaddr(X) paddr_to_vaddr_general(X) + #define is_phys_addr(X) stub_true_ul(X) +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch b/kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch new file mode 100644 index 0000000..06d8a84 --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch @@ -0,0 +1,42 @@ +From 974a507447e8d77df3a1e759cc569768372bfb8e Mon Sep 17 00:00:00 2001 +From: Youling Tang tangyouling@loongson.cn +Date: Mon, 22 Feb 2021 09:31:33 +0800 +Subject: [PATCH 09/10] [PATCH] mips64: Retrieve MAX_PHYSMEM_BITS from + vmcoreinfo + +Retrieve MAX_PHYSMEM_BITS from vmcoreinfo for mips64, which was added +by kernel commit 1d50e5d0c505 ("crash_core, vmcoreinfo: Append +'MAX_PHYSMEM_BITS' to vmcoreinfo"). This makes makedumpfile adaptable +for future MAX_PHYSMEM_BITS changes. + +Also ensure backward compatibility for kernel versions in which +MAX_PHYSMEM_BITS is not available in vmcoreinfo. + +Signed-off-by: Youling Tang tangyouling@loongson.cn +--- + arch/mips64.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/makedumpfile-1.6.8/arch/mips64.c b/makedumpfile-1.6.8/arch/mips64.c +index c968082..d541c3e 100644 +--- a/makedumpfile-1.6.8/arch/mips64.c ++++ b/makedumpfile-1.6.8/arch/mips64.c +@@ -35,9 +35,14 @@ get_phys_base_mips64(void) + int + get_machdep_info_mips64(void) + { +- info->max_physmem_bits = _MAX_PHYSMEM_BITS; + info->section_size_bits = _SECTION_SIZE_BITS; + ++ /* Check if we can get MAX_PHYSMEM_BITS from vmcoreinfo */ ++ if (NUMBER(MAX_PHYSMEM_BITS) != NOT_FOUND_NUMBER) ++ info->max_physmem_bits = NUMBER(MAX_PHYSMEM_BITS); ++ else ++ info->max_physmem_bits = _MAX_PHYSMEM_BITS; ++ + DEBUG_MSG("max_physmem_bits : %lx\n", info->max_physmem_bits); + DEBUG_MSG("section_size_bits: %lx\n", info->section_size_bits); + +-- +2.29.2 + diff --git a/kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch b/kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch new file mode 100644 index 0000000..df1fc2f --- /dev/null +++ b/kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch @@ -0,0 +1,42 @@ +From a8250642a4ff50a2559446f4e915a1f59ac7adf7 Mon Sep 17 00:00:00 2001 +From: Kazuhito Hagio k-hagio-ab@nec.com +Date: Mon, 5 Apr 2021 14:57:43 +0900 +Subject: [PATCH 10/10] [PATCH] x86_64: fix a use-after-free bug in -e option + +There was a use-after-free in find_vmemmap_x86_64(), which is used +for the -e opion, and it can cause a segmentation fault when malloc() +is used later: + + #0 0x00007f70fa6724b9 malloc (libc.so.6 + 0x8c4b9) + #1 0x0000556b3d1fbe6b prepare_bitmap1_buffer (makedumpfile + 0x38e6b) + #2 0x0000556b3d208912 create_dump_bitmap (makedumpfile + 0x45912) + #3 0x0000556b3d20e8c7 create_dumpfile (makedumpfile + 0x4b8c7) + #4 0x0000556b3d1ce0ec main (makedumpfile + 0xb0ec) + #5 0x00007f70fa60db75 __libc_start_main (libc.so.6 + 0x27b75) + #6 0x0000556b3d1ce54e _start (makedumpfile + 0xb54e) + +Signed-off-by: Kazuhito Hagio k-hagio-ab@nec.com +--- + arch/x86_64.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/makedumpfile-1.6.8/arch/x86_64.c b/makedumpfile-1.6.8/arch/x86_64.c +index 58b5c0b..ebf3447 100644 +--- a/makedumpfile-1.6.8/arch/x86_64.c ++++ b/makedumpfile-1.6.8/arch/x86_64.c +@@ -943,9 +943,11 @@ find_vmemmap_x86_64() + vmapp->rep_pfn_start = cur->rep_pfn_start; + vmapp->rep_pfn_end = cur->rep_pfn_end; + cur = cur->next; +- free(cur->prev); ++ if (cur->prev != vmaphead) ++ free(cur->prev); + i++; + } while (cur != vmaphead); ++ free(vmaphead); + nr_gvmem_pfns = i; + return TRUE; + } +-- +2.29.2 + diff --git a/kexec-tools.spec b/kexec-tools.spec index 69a89d5..131047f 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -105,7 +105,15 @@ Patch604: ./kexec-tools-2.0.20-makedumpfile-printk-use-committed-finalized-state Patch605: ./kexec-tools-2.0.21-makedumpfile-make-use-of-uts_namespace.name-offset-in-VMCOR.patch Patch606: ./kexec-tools-2.0.21-makedumpfile-Add-dry-run-option.patch Patch607: ./kexec-tools-2.0.21-makedumpfile-Add-shorthand-show-stats-option.patch -Patch608: ./kexec-tools-2.0.21-makedumpfile-Show-write-byte-size-in-report-messages.patch +Patch608: ./kexec-tools-2.0.21-makedumpfile-Makefile-Fix-a-compile-error-on-Debian.patch +Patch609: ./kexec-tools-2.0.21-makedumpfile-Add-initial-mips64-support.patch +Patch610: ./kexec-tools-2.0.21-makedumpfile-Use-vmcoreinfo-note-in-proc-kcore-for-mem.patch +Patch611: ./kexec-tools-2.0.21-makedumpfile-arm64-Make-use-of-NUMBER-VA_BITS-in-vmcore.patch +Patch612: ./kexec-tools-2.0.21-makedumpfile-arm64-support-flipped-VA-and-52-bit-kernel.patch +Patch613: ./kexec-tools-2.0.21-makedumpfile-Show-write-byte-size-in-report-messages.patch +Patch614: ./kexec-tools-2.0.21-makedumpfile-fix-build-on-sparc64.patch +Patch615: ./kexec-tools-2.0.21-makedumpfile-mips64-Retrieve-MAX_PHYSMEM_BITS-from-vmcorein.patch +Patch616: ./kexec-tools-2.0.21-makedumpfile-x86_64-fix-a-use-after-free-bug-in-e-option.patch
%description kexec-tools provides /sbin/kexec binary that facilitates a new @@ -127,6 +135,14 @@ tar -z -x -v -f %{SOURCE19} %patch606 -p1 %patch607 -p1 %patch608 -p1 +%patch609 -p1 +%patch610 -p1 +%patch611 -p1 +%patch612 -p1 +%patch613 -p1 +%patch614 -p1 +%patch615 -p1 +%patch616 -p1
%ifarch ppc %define archdef ARCH=ppc
Signed-off-by: Tao Liu ltao@redhat.com --- kexec-tools.spec | 2 +- sources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/kexec-tools.spec b/kexec-tools.spec index 131047f..dbc12b7 100644 --- a/kexec-tools.spec +++ b/kexec-tools.spec @@ -4,7 +4,7 @@ %global mkdf_shortver %(c=%{mkdf_ver}; echo ${c:0:7})
Name: kexec-tools -Version: 2.0.21 +Version: 2.0.22 Release: 9%{?dist} License: GPLv2 Summary: The kexec/kdump userspace component diff --git a/sources b/sources index c0e1169..87faf66 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (makedumpfile-1.6.8.tar.gz) = 15e60688b06013bf86e339ec855774ea2c904d425371ea867101704ba0611c69da891eb3cc96f67eb10197d8c42d217ea28bf11bcaa93ddc2495cbf984c0b7ec -SHA512 (kexec-tools-2.0.21.tar.xz) = f487d2e243c2c4f29fbc9da7d06806f65210f717904655fc84d8d162b9c4614c3dd62e1bb47104a79f0dc2af04e462baf764fb309b5d7e6d287264cb48fd2a3e +SHA512 (kexec-tools-2.0.22.tar.xz) = 7580860f272eee5af52139809f12961e5a5d3a65f4e191183ca9c845410425d25818945ac14ed04a60e6ce474dc2656fc6a14041177b0bf703f450820c7d6aba SHA512 (eppic-e8844d3.tar.gz) = d86b9f90c57e694107272d8f71b87f66a30743b9530480fb6f665026bbada4c6b0205a83e40b5383663a945681cfbfcf1ee79469fc219ddf679473c4b2290763