* [PATCH] fix put_user for 80386
@ 2005-03-12 16:55 Manfred Spraul
0 siblings, 0 replies; only message in thread
From: Manfred Spraul @ 2005-03-12 16:55 UTC (permalink / raw)
To: Linux Kernel Mailing List
[-- Attachment #1: Type: text/plain, Size: 474 bytes --]
Hi,
Linus noticed that put_user doesn't to the manual page table lookup that
is required for cpus without a working WP flag. The solution is simple:
if CONFIG_X86_WP_WORKS_OK is not set, then the put_user macros must call
__copy_to_user_ll(). That function contains the required checks.
This is already implemented for __put_user_size(), somehow I overlooked
__put_user_{1,2,4,8,X}.
What do you think?
Patch against 2.6.11-mm2, test booted with bochs.
--
Manfred
[-- Attachment #2: patch-uaccess-80386 --]
[-- Type: text/plain, Size: 796 bytes --]
--- 2.6/include/asm-i386/uaccess.h 2005-03-12 01:05:49.000000000 +0100
+++ build-2.6/include/asm-i386/uaccess.h 2005-03-12 17:37:27.938115959 +0100
@@ -217,6 +217,8 @@
*
* Returns zero on success, or -EFAULT on error.
*/
+#ifdef CONFIG_X86_WP_WORKS_OK
+
#define put_user(x,ptr) \
({ int __ret_pu; \
__chk_user_ptr(ptr); \
@@ -230,6 +232,21 @@
__ret_pu; \
})
+#else
+#define put_user(x,ptr) \
+({ \
+ int __ret_pu; \
+ __typeof__(*(ptr)) __pus_tmp = x; \
+ __ret_pu=0; \
+ if(unlikely(__copy_to_user_ll(ptr, &__pus_tmp, \
+ sizeof(*(ptr))) != 0)) \
+ __ret_pu=-EFAULT; \
+ __ret_pu; \
+ })
+
+
+#endif
+
/**
* __get_user: - Get a simple variable from user space, with less checking.
* @x: Variable to store result.
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-03-12 16:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-03-12 16:55 [PATCH] fix put_user for 80386 Manfred Spraul
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox