Hi Alexey,
-----Original Message-----
v5 change: added ack by Lianbo Jiang.
v4 changes: fixed GCC warnings reported by Kazu.
Thanks for the update.
Alexey Makhalov (3):
calc_kaslr_offset: try all CPUs
calc_kaslr_offset: 5-level paging support
I tested the patchset on a qemu memory dump with 5-level paging (la57)
and crash failed during starting session:
crash: read error: physical address: 125a0c000 type: "p4d page"
It seems that it needs something like:
diff --git a/kaslr_helper.c b/kaslr_helper.c
index f13b7ff0850b..b9fef825a290 100644
--- a/kaslr_helper.c
+++ b/kaslr_helper.c
@@ -671,6 +671,8 @@ calc_kaslr_offset(ulong *ko, ulong *pb)
machdep->machspec->physical_mask_shift =
__PHYSICAL_MASK_SHIFT_5LEVEL;
machdep->machspec->pgdir_shift = PGDIR_SHIFT_5LEVEL;
machdep->machspec->ptrs_per_pgd = PTRS_PER_PGD_5LEVEL;
+ if ((machdep->machspec->p4d = (char *)malloc(PAGESIZE())) ==
NULL)
+ error(FATAL, "cannot malloc p4d space.");
} else {
machdep->machspec->physical_mask_shift =
__PHYSICAL_MASK_SHIFT_2_6;
machdep->machspec->pgdir_shift = PGDIR_SHIFT;
diff --git a/x86_64.c b/x86_64.c
index 0acef2b04faf..939c8a9fddd4 100644
--- a/x86_64.c
+++ b/x86_64.c
@@ -356,9 +356,11 @@ x86_64_init(int when)
machdep->machspec->physical_mask_shift =
__PHYSICAL_MASK_SHIFT_5LEVEL;
machdep->machspec->pgdir_shift = PGDIR_SHIFT_5LEVEL;
machdep->machspec->ptrs_per_pgd = PTRS_PER_PGD_5LEVEL;
- if ((machdep->machspec->p4d = (char *)malloc(PAGESIZE())) ==
NULL)
- error(FATAL, "cannot malloc p4d space.");
- machdep->machspec->last_p4d_read = 0;
+ if (!machdep->machspec->p4d) {
+ if ((machdep->machspec->p4d = (char
*)malloc(PAGESIZE())) == NULL)
+ error(FATAL, "cannot malloc p4d
space.");
+ machdep->machspec->last_p4d_read = 0;
+ }
machdep->uvtop = x86_64_uvtop_level4; /* 5-level is optional
per-task */
machdep->kvbase = (ulong)PAGE_OFFSET;
machdep->identity_map_base = (ulong)PAGE_OFFSET;
With this, tested OK.
If this looks good, I can fix 2/3 when merging, or you can repost.
Thanks,
Kazu
kaslr: get offset by walking page tree
defs.h | 8 +-
diskdump.c | 6 +
kaslr_helper.c | 434 ++++++++++++++++++++++++++++++++++++++++++---------------
netdump.c | 6 +
sadump.c | 37 +----
symbols.c | 5 +-
vmware_vmss.c | 15 +-
7 files changed, 359 insertions(+), 152 deletions(-)
--
2.11.0