diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2008-02-19 09:29:34 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-02-19 09:29:35 -0500 |
commit | d5b02b3ff1d9a2e1074f559c84ed378cfa6fc3c0 (patch) | |
tree | 09cc1de46973bb4a8cd35a2d64d587f1144f38fd /arch/s390/lib | |
parent | 39f73b2886be3a255d8f4cd669c8c7e7957afbd9 (diff) |
[S390] Fix futex_atomic_cmpxchg_std inline assembly.
Add missing exception table entry so that the kernel can handle
proctection exceptions as well on the cs instruction. Currently only
specification exceptions are handled correctly.
The missing entry allows user space to crash the kernel.
Cc: stable <stable@kernel.org>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/lib')
-rw-r--r-- | arch/s390/lib/uaccess_std.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/s390/lib/uaccess_std.c b/arch/s390/lib/uaccess_std.c index 28c4500a58d0..d2ffbadb51a7 100644 --- a/arch/s390/lib/uaccess_std.c +++ b/arch/s390/lib/uaccess_std.c | |||
@@ -293,10 +293,10 @@ int futex_atomic_cmpxchg_std(int __user *uaddr, int oldval, int newval) | |||
293 | 293 | ||
294 | asm volatile( | 294 | asm volatile( |
295 | " sacf 256\n" | 295 | " sacf 256\n" |
296 | " cs %1,%4,0(%5)\n" | 296 | "0: cs %1,%4,0(%5)\n" |
297 | "0: lr %0,%1\n" | 297 | "1: lr %0,%1\n" |
298 | "1: sacf 0\n" | 298 | "2: sacf 0\n" |
299 | EX_TABLE(0b,1b) | 299 | EX_TABLE(0b,2b) EX_TABLE(1b,2b) |
300 | : "=d" (ret), "+d" (oldval), "=m" (*uaddr) | 300 | : "=d" (ret), "+d" (oldval), "=m" (*uaddr) |
301 | : "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr) | 301 | : "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr) |
302 | : "cc", "memory" ); | 302 | : "cc", "memory" ); |