• A
    x86/math-emu: Check __copy_from_user() result · e6b44ce1
    Arnd Bergmann 提交于
    The new __must_check annotation on __copy_from_user() successfully
    identified some code that has lacked the check since at least
    linux-2.1.73:
    
      arch/x86/math-emu/reg_ld_str.c:88:2: error: ignoring return value of \
      function declared with 'warn_unused_result' attribute [-Werror,-Wunused-result]
              __copy_from_user(sti_ptr, s, 10);
              ^~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
      arch/x86/math-emu/reg_ld_str.c:1129:2: error: ignoring return value of \
      function declared with 'warn_unused_result' attribute [-Werror,-Wunused-result]
              __copy_from_user(register_base + offset, s, other);
              ^~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      arch/x86/math-emu/reg_ld_str.c:1131:3: error: ignoring return value of \
      function declared with 'warn_unused_result' attribute [-Werror,-Wunused-result]
                      __copy_from_user(register_base, s + other, offset);
                    ^~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    In addition, the get_user()/put_user() helpers do not enforce a return
    value check, but actually still require one. These have been missing for
    even longer.
    
    Change the internal wrappers around get_user()/put_user() to force
    a signal and add a corresponding wrapper around __copy_from_user()
    to check all such cases.
    
     [ bp: Break long lines. ]
    
    Fixes: 257e458057e5 ("Import 2.1.73")
    Fixes: 9dd819a1 ("uaccess: add missing __must_check attributes")
    Signed-off-by: NArnd Bergmann <arnd@arndb.de>
    Signed-off-by: NBorislav Petkov <bp@suse.de>
    Reviewed-by: NKees Cook <keescook@chromium.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Bill Metzenthen <billm@melbpc.org.au>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/20191001142344.1274185-1-arnd@arndb.de
    e6b44ce1
fpu_system.h 4.4 KB