Skip to content
  • Mark Rutland's avatar
    lib: harden strncpy_from_user · bf90e56e
    Mark Rutland authored
    The strncpy_from_user() accessor is effectively a copy_from_user()
    specialised to copy strings, terminating early at a NUL byte if possible.
    In other respects it is identical, and can be used to copy an arbitrarily
    large buffer from userspace into the kernel.  Conceptually, it exposes a
    similar attack surface.
    
    As with copy_from_user(), we check the destination range when the kernel
    is built with KASAN, but unlike copy_from_user() we do not check the
    destination buffer when using HARDENED_USERCOPY.  As strncpy_from_user()
    calls get_user() in a loop, we must call check_object_size() explicitly.
    
    This patch adds this instrumentation to strncpy_from_user(), per the same
    rationale as with the regular copy_from_user().  In the absence of
    hardened usercopy this will have no impact as the instrumentation expands
    to an empty static inline function.
    
    Link: http://lkml.kernel.org/r/1472221903-31181-1-git-send-email-mark.rutland@arm.com
    
    
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bf90e56e