Hello community, here is the log from the commit of package makedumpfile for openSUSE:Factory checked in at 2018-03-26 11:56:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/makedumpfile (Old) and /work/SRC/openSUSE:Factory/.makedumpfile.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "makedumpfile" Mon Mar 26 11:56:17 2018 rev:66 rq:588595 version:1.6.3 Changes: -------- --- /work/SRC/openSUSE:Factory/makedumpfile/makedumpfile.changes 2018-01-30 15:39:27.364463901 +0100 +++ /work/SRC/openSUSE:Factory/.makedumpfile.new/makedumpfile.changes 2018-03-26 11:56:18.717430370 +0200 @@ -1,0 +2,6 @@ +Mon Mar 19 13:16:58 UTC 2018 - ptesa...@suse.com + +- makedumpfile-sadump-fix-PTI-enabled-kernels.patch: sadump: Fix a + problem of PTI enabled kernel (bsc#1085826). + +------------------------------------------------------------------- New: ---- makedumpfile-sadump-fix-PTI-enabled-kernels.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ makedumpfile.spec ++++++ --- /var/tmp/diff_new_pack.dwuuIg/_old 2018-03-26 11:56:19.781391985 +0200 +++ /var/tmp/diff_new_pack.dwuuIg/_new 2018-03-26 11:56:19.789391696 +0200 @@ -40,6 +40,7 @@ Patch0: %{name}-coptflags.diff Patch1: %{name}-override-libtinfo.patch Patch2: %{name}-always-use-bigger-SECTION_MAP_MASK.patch +Patch3: %{name}-sadump-fix-PTI-enabled-kernels.patch BuildRequires: libdw-devel BuildRequires: libebl-devel BuildRequires: libelf-devel @@ -70,6 +71,7 @@ %patch0 -p1 %patch1 -p1 %patch2 -p1 +%patch3 -p1 %build %if %{have_snappy} ++++++ makedumpfile-sadump-fix-PTI-enabled-kernels.patch ++++++ From: Takao Indoh <indou.ta...@jp.fujitsu.com> Date: Fri, 26 Jan 2018 09:22:26 +0900 Subject: sadump: Fix a problem of PTI enabled kernel References: bsc#1085826 Upstream: submitted Message-ID: <1516926146-20347-1-git-send-email-indou.ta...@jp.fujitsu.com> This patch fixes a problme that a dumpfile of sadump cannot be handled by makedumpfile when Page Table Isolation(PTI) is enabled. When PTI is enabled, bit 12 of CR3 register is used to split user space and kernel space. Also bit 11:0 is used for Process Context IDentifiers(PCID). To open a dump file of sadump, a value of CR3 is used to calculate KASLR offset and phys_base, therefore this patch fixes to mask CR3 register value collectly for PTI enabled kernel. Signed-off-by: Takao Indoh <indou.ta...@jp.fujitsu.com> Acked-by: Petr Tesarik <ptesa...@suse.com> --- makedumpfile.c | 2 ++ makedumpfile.h | 2 ++ sadump_info.c | 9 ++++++++- 3 files changed, 12 insertions(+), 1 deletion(-) --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1572,6 +1572,8 @@ get_symbol_info(void) SYMBOL_INIT(divide_error, "divide_error"); SYMBOL_INIT(idt_table, "idt_table"); SYMBOL_INIT(saved_command_line, "saved_command_line"); + SYMBOL_INIT(pti_init, "pti_init"); + SYMBOL_INIT(kaiser_init, "kaiser_init"); return TRUE; } --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1606,6 +1606,8 @@ struct symbol_table { unsigned long long divide_error; unsigned long long idt_table; unsigned long long saved_command_line; + unsigned long long pti_init; + unsigned long long kaiser_init; /* * symbols on ppc64 arch --- a/sadump_info.c +++ b/sadump_info.c @@ -1362,6 +1362,9 @@ finish: * kernel. Retrieve vmcoreinfo from address of "elfcorehdr=" and * get kaslr_offset and phys_base from vmcoreinfo. */ +#define PTI_USER_PGTABLE_BIT (info->page_shift) +#define PTI_USER_PGTABLE_MASK (1 << PTI_USER_PGTABLE_BIT) +#define CR3_PCID_MASK 0xFFFull int calc_kaslr_offset(void) { @@ -1389,7 +1392,11 @@ calc_kaslr_offset(void) } idtr = ((uint64_t)smram.IdtUpper)<<32 | (uint64_t)smram.IdtLower; - cr3 = smram.Cr3; + if ((SYMBOL(pti_init) != NOT_FOUND_SYMBOL) || + (SYMBOL(kaiser_init) != NOT_FOUND_SYMBOL)) + cr3 = smram.Cr3 & ~(CR3_PCID_MASK|PTI_USER_PGTABLE_MASK); + else + cr3 = smram.Cr3 & ~CR3_PCID_MASK; /* Convert virtual address of IDT table to physical address */ if ((idtr_paddr = vtop4_x86_64_pagetable(idtr, cr3)) == NOT_PADDR)