Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

s390/uaccess: add missing EX_TABLE entries to __clear_user()

For some exception types the instruction address points behind the
instruction that caused the exception. Take that into account and add
the missing exception table entries.

Cc: <stable@vger.kernel.org>
Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>

authored by

Heiko Carstens and committed by
Vasily Gorbik
4e1b5a86 d6d9875e

+3 -3
+3 -3
arch/s390/lib/uaccess.c
··· 157 157 asm volatile( 158 158 " lr 0,%[spec]\n" 159 159 "0: mvcos 0(%1),0(%4),%0\n" 160 - " jz 4f\n" 160 + "6: jz 4f\n" 161 161 "1: algr %0,%2\n" 162 162 " slgr %1,%2\n" 163 163 " j 0b\n" ··· 167 167 " clgr %0,%3\n" /* copy crosses next page boundary? */ 168 168 " jnh 5f\n" 169 169 "3: mvcos 0(%1),0(%4),%3\n" 170 - " slgr %0,%3\n" 170 + "7: slgr %0,%3\n" 171 171 " j 5f\n" 172 172 "4: slgr %0,%0\n" 173 173 "5:\n" 174 - EX_TABLE(0b,2b) EX_TABLE(3b,5b) 174 + EX_TABLE(0b,2b) EX_TABLE(6b,2b) EX_TABLE(3b,5b) EX_TABLE(7b,5b) 175 175 : "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2) 176 176 : "a" (empty_zero_page), [spec] "d" (spec.val) 177 177 : "cc", "memory", "0");