Skip to contentSkip to conversation

FAILED: patch "[PATCH] s390/chsc: Add exception handler for CHSC instruction" failed to apply to 4.4-stable tree

PATCH [email protected] 1 participant 1 message Mar 12, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

Quoted 1 line

From 77759137248f34864a8f7a58bbcebfcf1047504a Mon Sep 17 00:00:00 2001

From: Peter Oberparleiter <[email protected]>
Date: Mon, 20 Feb 2017 14:52:58 +0100
Subject: [PATCH] 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 64150adf89df ("s390/cio: Introduce generic synchronous CHSC IOCTL")
Cc <[email protected]> # v3.11+
drivers/s390/cio/ioasm.c +5 -3
index 8225da619014..4182f60124da 100644
@@ -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);