On 9/12/19 10:50 pm, Christophe Leroy wrote:
-extern unsigned long __clear_user(void __user *addr, unsigned long size); +extern unsigned long clear_user_asm(void __user *addr, unsigned long size);   static inline unsigned long clear_user(void __user *addr, unsigned long size)
  {
@@ -409,12 +409,17 @@ static inline unsigned long clear_user(void __user *addr, unsigned long size)
      might_fault();
      if (likely(access_ok(addr, size))) {
          allow_write_to_user(addr, size);
-        ret = __clear_user(addr, size);
+        ret = clear_user_asm(addr, size);
          prevent_write_to_user(addr, size);
      }

What about changing the above by the following ?

       if (likely(access_ok(addr, size)))        ret = __clear_user(addr, size);

      return ret;
  }
+static inline unsigned long __clear_user(void __user *addr, unsigned long size)
+{
+        return clear_user(addr, size);
+}
+

Then

static inline unsigned long __clear_user(void __user *addr, unsigned long size)
{
     allow_write_to_user(addr, size);
     ret = clear_user_asm(addr, size);
     prevent_write_to_user(addr, size);

     return ret;
}

This is exactly the patch I initially wrote, I ran it past mpe privately and he suggested aliasing clear_user() -> __clear_user() instead, as there's not much point keeping a separate path around for a single user for a basically non-existent performance gain.

--
Andrew Donnellan              OzLabs, ADL Canberra
[email protected]             IBM Australia Limited

Reply via email to