OSDN Git Service

kill uaccess_try()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 16 Feb 2020 02:10:25 +0000 (21:10 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 26 Mar 2020 19:02:14 +0000 (15:02 -0400)
finally

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Documentation/x86/exception-tables.rst
arch/x86/include/asm/asm.h
arch/x86/include/asm/processor.h
arch/x86/include/asm/uaccess.h
arch/x86/mm/extable.c

index ed6d4b0..514f518 100644 (file)
@@ -337,10 +337,4 @@ pointer which points to one of:
      entry->insn. It is used to distinguish page faults from machine
      check.
 
-3) ``int ex_handler_ext(const struct exception_table_entry *fixup)``
-     This case is used for uaccess_err ... we need to set a flag
-     in the task structure. Before the handler functions existed this
-     case was handled by adding a large offset to the fixup to tag
-     it as special.
-
 More functions can easily be added.
index cd339b8..0f63585 100644 (file)
 # define _ASM_EXTABLE_FAULT(from, to)                          \
        _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
 
-# define _ASM_EXTABLE_EX(from, to)                             \
-       _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
-
 # define _ASM_NOKPROBE(entry)                                  \
        .pushsection "_kprobe_blacklist","aw" ;                 \
        _ASM_ALIGN ;                                            \
 # define _ASM_EXTABLE_FAULT(from, to)                          \
        _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
 
-# define _ASM_EXTABLE_EX(from, to)                             \
-       _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
-
 /* For C file, we already have NOKPROBE_SYMBOL macro */
 #endif
 
index 09705cc..19718fc 100644 (file)
@@ -541,7 +541,6 @@ struct thread_struct {
        mm_segment_t            addr_limit;
 
        unsigned int            sig_on_uaccess_err:1;
-       unsigned int            uaccess_err:1;  /* uaccess failed */
 
        /* Floating point and extended processor state */
        struct fpu              fpu;
index 4dc5acc..d11662f 100644 (file)
@@ -193,23 +193,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
                     : : "A" (x), "r" (addr)                    \
                     : : label)
 
-#define __put_user_asm_ex_u64(x, addr)                                 \
-       asm volatile("\n"                                               \
-                    "1:        movl %%eax,0(%1)\n"                     \
-                    "2:        movl %%edx,4(%1)\n"                     \
-                    "3:"                                               \
-                    _ASM_EXTABLE_EX(1b, 2b)                            \
-                    _ASM_EXTABLE_EX(2b, 3b)                            \
-                    : : "A" (x), "r" (addr))
-
 #define __put_user_x8(x, ptr, __ret_pu)                                \
        asm volatile("call __put_user_8" : "=a" (__ret_pu)      \
                     : "A" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx")
 #else
 #define __put_user_goto_u64(x, ptr, label) \
        __put_user_goto(x, ptr, "q", "", "er", label)
-#define __put_user_asm_ex_u64(x, addr) \
-       __put_user_asm_ex(x, addr, "q", "", "er")
 #define __put_user_x8(x, ptr, __ret_pu) __put_user_x(8, x, ptr, __ret_pu)
 #endif
 
@@ -289,31 +278,6 @@ do {                                                                       \
        }                                                               \
 } while (0)
 
-/*
- * This doesn't do __uaccess_begin/end - the exception handling
- * around it must do that.
- */
-#define __put_user_size_ex(x, ptr, size)                               \
-do {                                                                   \
-       __chk_user_ptr(ptr);                                            \
-       switch (size) {                                                 \
-       case 1:                                                         \
-               __put_user_asm_ex(x, ptr, "b", "b", "iq");              \
-               break;                                                  \
-       case 2:                                                         \
-               __put_user_asm_ex(x, ptr, "w", "w", "ir");              \
-               break;                                                  \
-       case 4:                                                         \
-               __put_user_asm_ex(x, ptr, "l", "k", "ir");              \
-               break;                                                  \
-       case 8:                                                         \
-               __put_user_asm_ex_u64((__typeof__(*ptr))(x), ptr);      \
-               break;                                                  \
-       default:                                                        \
-               __put_user_bad();                                       \
-       }                                                               \
-} while (0)
-
 #ifdef CONFIG_X86_32
 #define __get_user_asm_u64(x, ptr, retval, errret)                     \
 ({                                                                     \
@@ -430,29 +394,6 @@ struct __large_struct { unsigned long buf[100]; };
        retval = __put_user_failed(x, addr, itype, rtype, ltype, errret);       \
 } while (0)
 
-#define __put_user_asm_ex(x, addr, itype, rtype, ltype)                        \
-       asm volatile("1:        mov"itype" %"rtype"0,%1\n"              \
-                    "2:\n"                                             \
-                    _ASM_EXTABLE_EX(1b, 2b)                            \
-                    : : ltype(x), "m" (__m(addr)))
-
-/*
- * uaccess_try and catch
- */
-#define uaccess_try    do {                                            \
-       current->thread.uaccess_err = 0;                                \
-       __uaccess_begin();                                              \
-       barrier();
-
-#define uaccess_try_nospec do {                                                \
-       current->thread.uaccess_err = 0;                                \
-       __uaccess_begin_nospec();                                       \
-
-#define uaccess_catch(err)                                             \
-       __uaccess_end();                                                \
-       (err) |= (current->thread.uaccess_err ? -EFAULT : 0);           \
-} while (0)
-
 /**
  * __get_user - Get a simple variable from user space, with less checking.
  * @x:   Variable to store result.
@@ -502,12 +443,6 @@ struct __large_struct { unsigned long buf[100]; };
 #define __put_user(x, ptr)                                             \
        __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
 
-#define put_user_try           uaccess_try
-#define put_user_catch(err)    uaccess_catch(err)
-
-#define put_user_ex(x, ptr)                                            \
-       __put_user_size_ex((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
-
 extern unsigned long
 copy_from_user_nmi(void *to, const void __user *from, unsigned long n);
 extern __must_check long
index 30bb0bd..b991aa4 100644 (file)
@@ -80,18 +80,6 @@ __visible bool ex_handler_uaccess(const struct exception_table_entry *fixup,
 }
 EXPORT_SYMBOL(ex_handler_uaccess);
 
-__visible bool ex_handler_ext(const struct exception_table_entry *fixup,
-                             struct pt_regs *regs, int trapnr,
-                             unsigned long error_code,
-                             unsigned long fault_addr)
-{
-       /* Special hack for uaccess_err */
-       current->thread.uaccess_err = 1;
-       regs->ip = ex_fixup_addr(fixup);
-       return true;
-}
-EXPORT_SYMBOL(ex_handler_ext);
-
 __visible bool ex_handler_rdmsr_unsafe(const struct exception_table_entry *fixup,
                                       struct pt_regs *regs, int trapnr,
                                       unsigned long error_code,