aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2008-03-20 12:33:38 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-03-20 12:33:46 -0400
commit504e75d0ed3389747e40a4aaa4b1f4e569576665 (patch)
tree7e27688729d6cff7b654e87403d3176a358cfce0
parent457fb605834504af294916411be128a9b21fc3f6 (diff)
[S390] futex: let futex_atomic_cmpxchg_pt survive early functional tests.
a0c1e9073ef7428a14309cba010633a6cd6719ea "futex: runtime enable pi and robust functionality" introduces a test wether futex in atomic stuff works or not. It does that by writing to address 0 of the kernel address space. This will crash on older machines where addressing mode switching is enabled but where the mvcos instruction is not available. Page table walking is done by hand and therefore the code tries to access current->mm which is NULL. Therefore add an extra check, so we survive the early test. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r--arch/s390/lib/uaccess_pt.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c
index 7e8efaade2ea..5efdfe9f5e76 100644
--- a/arch/s390/lib/uaccess_pt.c
+++ b/arch/s390/lib/uaccess_pt.c
@@ -406,6 +406,8 @@ int futex_atomic_cmpxchg_pt(int __user *uaddr, int oldval, int newval)
406{ 406{
407 int ret; 407 int ret;
408 408
409 if (!current->mm)
410 return -EFAULT;
409 spin_lock(&current->mm->page_table_lock); 411 spin_lock(&current->mm->page_table_lock);
410 uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr); 412 uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr);
411 if (!uaddr) { 413 if (!uaddr) {