arm64: move untagged_addr macro from uaccess.h to memory.h
authorAndrey Konovalov <[email protected]>
Fri, 28 Dec 2018 08:30:12 +0000 (00:30 -0800)
committerLinus Torvalds <[email protected]>
Fri, 28 Dec 2018 20:11:43 +0000 (12:11 -0800)
Move the untagged_addr() macro from arch/arm64/include/asm/uaccess.h
to arch/arm64/include/asm/memory.h to be later reused by KASAN.

Also make the untagged_addr() macro accept all kinds of address types
(void *, unsigned long, etc.). This allows not to specify type casts in
each place where the macro is used. This is done by using __typeof__.

Link: http://lkml.kernel.org/r/2e9ef8d2ed594106eca514b268365b5419113f6a.1544099024.git.andreyknvl@google.com
Signed-off-by: Andrey Konovalov <[email protected]>
Acked-by: Mark Rutland <[email protected]>
Acked-by: Will Deacon <[email protected]>
Cc: Andrey Ryabinin <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Dmitry Vyukov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
arch/arm64/include/asm/memory.h
arch/arm64/include/asm/uaccess.h

index 7640feed268df820c9cd2920534bd190c28edf55..e73bb89d6141da4edad59b657f11e47311964c43 100644 (file)
@@ -218,6 +218,14 @@ extern u64                 vabits_user;
  */
 #define PHYS_PFN_OFFSET        (PHYS_OFFSET >> PAGE_SHIFT)
 
+/*
+ * When dealing with data aborts, watchpoints, or instruction traps we may end
+ * up with a tagged userland pointer. Clear the tag to get a sane pointer to
+ * pass on to access_ok(), for instance.
+ */
+#define untagged_addr(addr)    \
+       ((__typeof__(addr))sign_extend64((u64)(addr), 55))
+
 /*
  * Physical vs virtual RAM address space conversion.  These are
  * private definitions which should NOT be used outside memory.h
index fad33f5fde47e41610ac9adbda9ad2a0175294d5..ed252435fd92484cde9d0c04a36ba27b35605948 100644 (file)
@@ -95,13 +95,6 @@ static inline unsigned long __range_ok(const void __user *addr, unsigned long si
        return ret;
 }
 
-/*
- * When dealing with data aborts, watchpoints, or instruction traps we may end
- * up with a tagged userland pointer. Clear the tag to get a sane pointer to
- * pass on to access_ok(), for instance.
- */
-#define untagged_addr(addr)            sign_extend64(addr, 55)
-
 #define access_ok(type, addr, size)    __range_ok(addr, size)
 #define user_addr_max                  get_fs