diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2008-03-20 12:33:38 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-03-20 12:33:46 -0400 |
commit | 504e75d0ed3389747e40a4aaa4b1f4e569576665 (patch) | |
tree | 7e27688729d6cff7b654e87403d3176a358cfce0 | |
parent | 457fb605834504af294916411be128a9b21fc3f6 (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.c | 2 |
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(¤t->mm->page_table_lock); | 411 | spin_lock(¤t->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) { |