diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2012-07-28 00:20:34 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-08-09 08:23:15 -0700 |
commit | 34fbbeb1bd9c5d68d136eeaba9b305bed45417f5 (patch) | |
tree | e43621d55c5cac78dcbd0b139a818268aa39b67f | |
parent | c36bb21c03a24e94c2897d16372b736ab2ebbec6 (diff) | |
download | lwn-34fbbeb1bd9c5d68d136eeaba9b305bed45417f5.tar.gz lwn-34fbbeb1bd9c5d68d136eeaba9b305bed45417f5.zip |
m68k: Make sys_atomic_cmpxchg_32 work on classic m68k
commit 9e2760d18b3cf179534bbc27692c84879c61b97c upstream.
User space access must always go through uaccess accessors, since on
classic m68k user space and kernel space are completely separate.
Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Tested-by: Thorsten Glaser <tg@debian.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | arch/m68k/kernel/sys_m68k.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index 8623f8dc16f8..9a5932ec3689 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c @@ -479,9 +479,13 @@ sys_atomic_cmpxchg_32(unsigned long newval, int oldval, int d3, int d4, int d5, goto bad_access; } - mem_value = *mem; + /* + * No need to check for EFAULT; we know that the page is + * present and writable. + */ + __get_user(mem_value, mem); if (mem_value == oldval) - *mem = newval; + __put_user(newval, mem); pte_unmap_unlock(pte, ptl); up_read(&mm->mmap_sem); |