• Mark Rutland's avatar
    ARM: 8249/1: mm: dump: don't skip regions · cca547e9
    Mark Rutland authored
    Currently the arm page table dumping code starts dumping page tables
    from USER_PGTABLES_CEILING. This is unnecessary for skipping any entries
    related to userspace as the swapper_pg_dir does not contain such
    entries, and results in a couple of unfortuante side effects.
    
    Firstly, any kernel mappings which might exist below
    USER_PGTABLES_CEILING will not be accounted in the dump output. This
    masks any entries erroneously created below this address.
    
    Secondly, if the final page table entry walked is part of a valid
    mapping the page table dumping code will not log the region this entry
    is part of, as the final note_page call in walk_pgd will trigger an
    early return when 0 < USER_PGTABLES_CEILING. Luckily this isn't seen on
    contemporary systems as they typically don't have enough RAM to extend
    the linear mapping right to the end of the address space.
    
    Due to the way addr is constructed in the walk_* functions, it can never
    be less than USER_PGTABLES_CEILING when walking the page tables, so it
    is not necessary to avoid dereferencing invalid table addresses. The
    existing checks for st->current_prot and st->marker[1].start_address are
    sufficient to ensure we will not print and/or dereference garbage when
    trying to log information.
    
    This patch removes both problematic uses of USER_PGTABLES_CEILING from
    the arm page table dumping code, preventing both of these issues. We
    will now report any low mappings, and the final note_page call will not
    return early, ensuring all regions are logged.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Steve Capper <steve.capper@linaro.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    cca547e9
dump.c 7.77 KB