From c32abbf89d93acb8093696adae607f602699a4a1 Mon Sep 17 00:00:00 2001 From: Kazuhito Hagio Date: Fri, 16 Apr 2021 09:35:34 +0900 Subject: [PATCH] ARM: Fix uvtop conversion on LPAE Currently arm_uvtop() calls arm_lpae_vtop() with the LPAE and it can use LPAE_VTOP() also for a user virtual address. Without this patch, commands that use uvtop conversion such as "ps -a", "gcore" fail as readmem() for a uvaddr returns a seek error: crash> ps -a 357 ... ps: cannot access user stack address: bef2f97c crash> gcore gcore: seek error: physical address: 7ec56eab type: "fill_psinfo: pr_psargs" Failed. Fixes: https://github.com/crash-utility/crash-extensions/issues/2 Signed-off-by: Kazuhito Hagio --- arm.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/arm.c b/arm.c index e52d29f..0532469 100644 --- a/arm.c +++ b/arm.c @@ -1125,17 +1125,18 @@ arm_lpae_vtop(ulong vaddr, ulong *pgd, physaddr_t *paddr, int verbose) pmd_t pmd_pte; pte_t pte; - if (!vt->vmalloc_start) { - *paddr = LPAE_VTOP(vaddr); - return TRUE; - } - - if (!IS_VMALLOC_ADDR(vaddr)) { - *paddr = LPAE_VTOP(vaddr); - if (!verbose) + if (IS_KVADDR(vaddr)) { + if (!vt->vmalloc_start) { + *paddr = LPAE_VTOP(vaddr); return TRUE; - } + } + if (!IS_VMALLOC_ADDR(vaddr)) { + *paddr = LPAE_VTOP(vaddr); + if (!verbose) + return TRUE; + } + } if (verbose) fprintf(fp, "PAGE DIRECTORY: %lx\n", (ulong)pgd);