* Test whether a block of memory is a valid user space address.
  * Returns 0 if the range is valid, nonzero otherwise.
  */
-static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size)
+static inline bool __access_ok(void __user *ptr, unsigned long size)
 {
        unsigned long limit = TASK_SIZE_MAX;
+       unsigned long addr = ptr;
 
-       /*
-        * If we have used "sizeof()" for the size,
-        * we know it won't overflow the limit (but
-        * it might overflow the 'addr', so it's
-        * important to subtract the size from the
-        * limit, not add it to the address).
-        */
-       if (__builtin_constant_p(size))
-               return unlikely(addr > limit - size);
-
-       /* Arbitrary sizes? Be careful about overflow */
-       addr += size;
-       if (unlikely(addr < size))
-               return true;
-       return unlikely(addr > limit);
+       return (size <= limit) && (addr <= (limit - size));
 }
 
-#define __access_ok(addr, size)                                                \
-({                                                                     \
-       __chk_user_ptr(addr);                                           \
-       !__chk_range_not_ok((unsigned long __force)(addr), size);       \
-})
-
 #ifdef CONFIG_DEBUG_ATOMIC_SLEEP
 static inline bool pagefault_disabled(void);
 # define WARN_ON_IN_IRQ()      \