diff options
author | Peter Oberparleiter <oberpar@linux.vnet.ibm.com> | 2017-02-20 14:52:58 +0100 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2017-06-05 21:17:14 +0100 |
commit | 81339c5c06376cd40d22775f50fa9cb75f125272 (patch) | |
tree | 12addc8de00ac9fe025eed0a0ec5f59ea29899bd /drivers/s390/cio | |
parent | 179d24052ed075150a167dfb5510327d714d041a (diff) | |
download | linux-stable-81339c5c06376cd40d22775f50fa9cb75f125272.tar.gz linux-stable-81339c5c06376cd40d22775f50fa9cb75f125272.tar.bz2 linux-stable-81339c5c06376cd40d22775f50fa9cb75f125272.zip |
s390/chsc: Add exception handler for CHSC instruction
commit 77759137248f34864a8f7a58bbcebfcf1047504a upstream.
Prevent kernel crashes due to unhandled exceptions raised by the CHSC
instruction which may for example be triggered by invalid ioctl data.
Fixes: 64150adf89df ("s390/cio: Introduce generic synchronous CHSC IOCTL")
Signed-off-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r-- | drivers/s390/cio/ioasm.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/s390/cio/ioasm.h b/drivers/s390/cio/ioasm.h index 4d80fc67a06b..1aec5ae5dbd6 100644 --- a/drivers/s390/cio/ioasm.h +++ b/drivers/s390/cio/ioasm.h @@ -138,13 +138,15 @@ static inline int tpi(struct tpi_info *addr) static inline int chsc(void *chsc_area) { typedef struct { char _[4096]; } addr_type; - int cc; + int cc = -EIO; asm volatile( " .insn rre,0xb25f0000,%2,0\n" - " ipm %0\n" + "0: ipm %0\n" " srl %0,28\n" - : "=d" (cc), "=m" (*(addr_type *) chsc_area) + "1:\n" + EX_TABLE(0b, 1b) + : "+d" (cc), "=m" (*(addr_type *) chsc_area) : "d" (chsc_area), "m" (*(addr_type *) chsc_area) : "cc"); return cc; |