• Heiko Carstens's avatar
    s390/uaccess: fix kernel ds access for page table walk · 066c4373
    Heiko Carstens authored
    When the kernel resides in home space and the mvcos instruction is not
    available uaccesses for kernel ds happen via simple strnlen() or memcpy()
    calls.
    This however can break badly, since uaccesses in kernel space may fail as
    well, especially if CONFIG_DEBUG_PAGEALLOC is turned on.
    
    To fix this implement strnlen_kernel() and copy_in_kernel() functions
    which can only be used by the page table uaccess functions. These two
    functions detect invalid memory accesses and return the correct length
    of processed data.. Both functions are more or less a copy of the std
    variants without sacf calls.
    
    Fixes ipl crashes on 31 bit machines as well on 64 bit machines without
    mvcos. Caused by changing the default address space of the kernel being
    home space.
    Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    066c4373
uaccess_pt.c 10.8 KB