Skip to content
  • Thomas Garnier's avatar
    arm/syscalls: Optimize address limit check · e33f8d32
    Thomas Garnier authored
    
    
    Disable the generic address limit check in favor of an architecture
    specific optimized implementation. The generic implementation using
    pending work flags did not work well with ARM and alignment faults.
    
    The address limit is checked on each syscall return path to user-mode
    path as well as the irq user-mode return function. If the address limit
    was changed, a function is called to report data corruption (stopping
    the kernel or process based on configuration).
    
    The address limit check has to be done before any pending work because
    they can reset the address limit and the process is killed using a
    SIGKILL signal. For example the lkdtm address limit check does not work
    because the signal to kill the process will reset the user-mode address
    limit.
    
    Signed-off-by: default avatarThomas Garnier <thgarnie@google.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Tested-by: default avatarKees Cook <keescook@chromium.org>
    Tested-by: default avatarLeonard Crestez <leonard.crestez@nxp.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Pratyush Anand <panand@redhat.com>
    Cc: Dave Martin <Dave.Martin@arm.com>
    Cc: Will Drewry <wad@chromium.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: linux-api@vger.kernel.org
    Cc: Yonghong Song <yhs@fb.com>
    Cc: linux-arm-kernel@lists.infradead.org
    Link: http://lkml.kernel.org/r/1504798247-48833-4-git-send-email-keescook@chromium.org
    e33f8d32