• Alexey Brodkin's avatar
    ARC: fix page address calculation if PAGE_OFFSET != LINUX_LINK_BASE · 05e3d5b5
    Alexey Brodkin authored
    commit 06f34e1c upstream.
    
    We used to calculate page address differently in 2 cases:
    
    1. In virt_to_page(x) we do
     --->8---
     mem_map + (x - CONFIG_LINUX_LINK_BASE) >> PAGE_SHIFT
     --->8---
    
    2. In in pte_page(x) we do
     --->8---
     mem_map + (pte_val(x) - PAGE_OFFSET) >> PAGE_SHIFT
     --->8---
    
    That leads to problems in case PAGE_OFFSET != CONFIG_LINUX_LINK_BASE -
    different pages will be selected depending on where and how we calculate
    page address.
    
    In particular in the STAR 9000853582 when gdb attempted to read memory
    of another process it got improper page in get_user_pages() because this
    is exactly one of the places where we search for a page by pte_page().
    
    The fix is trivial - we need to calculate page address similarly in both
    cases.
    Signed-off-by: default avatarAlexey Brodkin <abrodkin@synopsys.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    05e3d5b5
pgtable.h 13.8 KB