Currently arm_uvtop() calls arm_lpae_vtop() with the LPAE and it uses
LPAE_VTOP() also for a user virtual address, but it looks incorrect.
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 <[email protected]>
---
 arm.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/arm.c b/arm.c
index e52d29f04015..05324691da17 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);
-- 
1.8.3.1


--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility

Reply via email to