• Kristina Martsenko's avatar
    arm64: entry: improve data abort handling of tagged pointers · 3ccf6956
    Kristina Martsenko authored
    commit 276e9327 upstream.
    
    This backport has a minor difference from the upstream commit: it adds
    the asm-uaccess.h file, which is not present in 4.4, because 4.4 does
    not have commit b4b8664d ("arm64: don't pull uaccess.h into *.S").
    
    Original patch description:
    
    When handling a data abort from EL0, we currently zero the top byte of
    the faulting address, as we assume the address is a TTBR0 address, which
    may contain a non-zero address tag. However, the address may be a TTBR1
    address, in which case we should not zero the top byte. This patch fixes
    that. The effect is that the full TTBR1 address is passed to the task's
    signal handler (or printed out in the kernel log).
    
    When handling a data abort from EL1, we leave the faulting address
    intact, as we assume it's either a TTBR1 address or a TTBR0 address with
    tag 0x00. This is true as far as I'm aware, we don't seem to access a
    tagged TTBR0 address anywhere in the kernel. Regardless, it's easy to
    forget about address tags, and code added in the future may not always
    remember to remove tags from addresses before accessing them. So add tag
    handling to the EL1 data abort handler as well. This also makes it
    consistent with the EL0 data abort handler.
    
    Fixes: d50240a5 ("arm64: mm: permit use of tagged pointers at EL0")
    Reviewed-by: default avatarDave Martin <Dave.Martin@arm.com>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarKristina Martsenko <kristina.martsenko@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    3ccf6956
entry.S 17 KB