#else
  #define can_do_masked_user_access() 0
  #define masked_user_access_begin(src) NULL
+ #define mask_user_address(src) (src)
 #endif
 
 /*
 {
        unsigned long res = n;
        might_fault();
-       if (!should_fail_usercopy() && likely(access_ok(from, n))) {
+       if (should_fail_usercopy())
+               goto fail;
+       if (can_do_masked_user_access())
+               from = mask_user_address(from);
+       else {
+               if (!access_ok(from, n))
+                       goto fail;
                /*
                 * Ensure that bad access_ok() speculation will not
                 * lead to nasty side effects *after* the copy is
                 * finished:
                 */
                barrier_nospec();
-               instrument_copy_from_user_before(to, from, n);
-               res = raw_copy_from_user(to, from, n);
-               instrument_copy_from_user_after(to, from, n, res);
        }
-       if (unlikely(res))
-               memset(to + (n - res), 0, res);
+       instrument_copy_from_user_before(to, from, n);
+       res = raw_copy_from_user(to, from, n);
+       instrument_copy_from_user_after(to, from, n, res);
+       if (likely(!res))
+               return 0;
+fail:
+       memset(to + (n - res), 0, res);
        return res;
 }
 extern __must_check unsigned long