summaryrefslogtreecommitdiff
path: root/sadump_info.c
diff options
context:
space:
mode:
authorThadeu Lima de Souza Cascardo <cascardo@debian.org>2018-07-19 15:17:51 -0300
committerThadeu Lima de Souza Cascardo <cascardo@debian.org>2018-07-19 15:17:51 -0300
commita9f6c6d8f2a6564f59787a92b5c38399ccae9e18 (patch)
treee235c6836eb76dc59c987cd4506e60d660df6302 /sadump_info.c
parentac1ae6e8008c96a0cb6dd935a4ab3bd1901eb3de (diff)
New upstream version 1.6.4
Diffstat (limited to 'sadump_info.c')
-rw-r--r--sadump_info.c9
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)