瀏覽代碼

MIPS: Make access_ok() sideeffect proof.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Ralf Baechle 16 年之前
父節點
當前提交
d0aab922b1
共有 1 個文件被更改,包括 13 次插入3 次删除
  1. 13 3
      arch/mips/include/asm/uaccess.h

+ 13 - 3
arch/mips/include/asm/uaccess.h

@@ -104,11 +104,21 @@
 
 #define __access_mask get_fs().seg
 
-#define __access_ok(addr, size, mask)					\
-	(((signed long)((mask) & ((addr) | ((addr) + (size)) | __ua_size(size)))) == 0)
+#define __access_ok(addr, size, mask)							\
+({											\
+	const volatile void __user *__up = addr;					\
+	unsigned long __addr = (unsigned long) __up;					\
+	unsigned long __size = size;							\
+	unsigned long __mask = mask;							\
+	unsigned long __ok;								\
+											\
+	__ok = (signed long)(__mask & (__addr | (__addr + __size) |			\
+		__ua_size(__size)));							\
+	__ok == 0;									\
+})
 
 #define access_ok(type, addr, size)					\
-	likely(__access_ok((unsigned long)(addr), (size), __access_mask))
+	likely(__access_ok((addr), (size), __access_mask))
 
 /*
  * put_user: - Write a simple value into user space.