Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77759137 authored by Peter Oberparleiter's avatar Peter Oberparleiter Committed by Martin Schwidefsky
Browse files

s390/chsc: Add exception handler for CHSC instruction



Prevent kernel crashes due to unhandled exceptions raised by the CHSC
instruction which may for example be triggered by invalid ioctl data.

Fixes: 64150adf ("s390/cio: Introduce generic synchronous CHSC IOCTL")
Cc: <stable@vger.kernel.org> # v3.11+
Signed-off-by: default avatarPeter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reviewed-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent f50c0e63
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -165,13 +165,15 @@ int tpi(struct tpi_info *addr)
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");
	trace_s390_cio_chsc(chsc_area, cc);