Skip to contentSkip to conversation

Patch "s390/sclp: clear upper register halves in _sclp_print_early" has been added to the 4.1-stable tree

PATCH [email protected] 1 participant 1 message Aug 7, 2015

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

s390/sclp: clear upper register halves in _sclp_print_early

to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
s390-sclp-clear-upper-register-halves-in-_sclp_print_early.patch
and it can be found in the queue-4.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From f9c87a6f46d508eae0d9ae640be98d50f237f827 Mon Sep 17 00:00:00 2001

From: Martin Schwidefsky <[email protected]>
Date: Mon, 6 Jul 2015 17:58:19 +0200
Subject: s390/sclp: clear upper register halves in _sclp_print_early

From: Martin Schwidefsky <[email protected]>

commit f9c87a6f46d508eae0d9ae640be98d50f237f827 upstream.

If the kernel is compiled with gcc 5.1 and the XZ compression option the decompress_kernel function calls _sclp_print_early in 64-bit mode while the content of the upper register half of %r6 is non-zero. This causes a specification exception on the servc instruction in _sclp_servc.

The _sclp_print_early function saves and restores the upper registers halves but it fails to clear them for the 31-bit code of the mini sclp driver.

---
 arch/s390/kernel/sclp.S |    4 ++++
 1 file changed, 4 insertions(+)
arch/s390/kernel/sclp.S +4 -0
@@ -270,6 +270,8 @@ ENTRY(_sclp_print_early)
 	jno	.Lesa2
 	ahi	%r15,-80
 	stmh	%r6,%r15,96(%r15)		# store upper register halves
+	basr	%r13,0
+	lmh	%r0,%r15,.Lzeroes-.(%r13)	# clear upper register halves
 .Lesa2:
 	lr	%r10,%r2			# save string pointer
 	lhi	%r2,0
@@ -291,6 +293,8 @@ ENTRY(_sclp_print_early)
 .Lesa3:
 	lm	%r6,%r15,120(%r15)		# restore registers
 	br	%r14
+.Lzeroes:
+	.fill	64,4,0
 
 .LwritedataS4:
 	.long	0x00760005			# SCLP command for write data

Patches currently in stable-queue which might be from [email protected] are

queue-4.1/s390-cachinfo-add-missing-facility-check-to-init_cache_level.patch queue-4.1/s390-process-fix-sfpc-inline-assembly.patch queue-4.1/s390-sclp-clear-upper-register-halves-in-_sclp_print_early.patch queue-4.1/s390-nmi-fix-vector-register-corruption.patch queue-4.1/s390-bpf-clear-correct-bpf-accumulator-register.patch