在 2021年04月16日 08:35, HAGIO KAZUHITO(萩尾 一仁) 写道:
> 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

The discussion there should be clear. Acked-by: Lianbo Jiang 
<[email protected]>

> 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);
> 

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

Reply via email to