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)

Reply via email to