diff options
author | Thadeu Lima de Souza Cascardo <cascardo@debian.org> | 2018-07-19 15:17:51 -0300 |
---|---|---|
committer | Thadeu Lima de Souza Cascardo <cascardo@debian.org> | 2018-07-19 15:17:51 -0300 |
commit | a9f6c6d8f2a6564f59787a92b5c38399ccae9e18 (patch) | |
tree | e235c6836eb76dc59c987cd4506e60d660df6302 /sadump_info.c | |
parent | ac1ae6e8008c96a0cb6dd935a4ab3bd1901eb3de (diff) |
New upstream version 1.6.4
Diffstat (limited to 'sadump_info.c')
-rw-r--r-- | sadump_info.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/sadump_info.c b/sadump_info.c index 148d4ba..dd50d48 100644 --- 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) |