mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
[PARISC] futex: special case cmpxchg NULL in kernel space
Commit a0c1e9073e
added code to futex.c
to detect whether futex_atomic_cmpxchg_inatomic was implemented at run
time:
+ curval = cmpxchg_futex_value_locked(NULL, 0, 0);
+ if (curval == -EFAULT)
+ futex_cmpxchg_enabled = 1;
This is bogus on parisc, since page zero in kernel virtual space is the
gateway page for syscall entry, and should not be read from the kernel.
(That, and we really don't like the kernel faulting on its own address
space...)
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
This commit is contained in:
parent
dc39455e79
commit
c20a84c910
1 changed files with 8 additions and 2 deletions
|
@ -56,6 +56,12 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|||
int err = 0;
|
||||
int uval;
|
||||
|
||||
/* futex.c wants to do a cmpxchg_inatomic on kernel NULL, which is
|
||||
* our gateway page, and causes no end of trouble...
|
||||
*/
|
||||
if (segment_eq(KERNEL_DS, get_fs()) && !uaddr)
|
||||
return -EFAULT;
|
||||
|
||||
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
|
@ -67,5 +73,5 @@ futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
|||
return uval;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif /*__KERNEL__*/
|
||||
#endif /*_ASM_PARISC_FUTEX_H*/
|
||||
|
|
Loading…
Reference in a new issue