Blob Blame History Raw
From: Harald Freudenberger <freude@linux.ibm.com>
Subject: s390/zcrypt: fix specification exception on z196 during ap probe
References: LTC#174936, bsc#1123061
Patch-mainline: v5.0 or v5.0-rc7 (next release)
Git-commit: 8f9aca0c45322a807a343fc32f95f2500f83b9ae

Description:   kernel: zcrypt: fix specification exception on z196 at ap probe
Symptom:       kernel panic on z196 machines at boot time
Problem:       The older machines (z196 and older) don't have the QCI
               instruction available. With support for up to 256 crypto
               cards the probing of each card has been extended to check
               card ids from 0 up to 255. For machines with QCI support
               there is a filter limiting the range of probed cards. The
               older machines (z196 and older) don't have this filter and so
               since support for 256 cards is in the driver all cards are
               probed. However, these machines also require to have the card
               id fit into 6 bits. Exceeding this limit results in a
               specification exception which happens on every kernel startup
               even when there is no crypto configured and used at all.
Solution:      This fix limits the range of probed crypto cards to 64 if
               there is no QCI instruction available to obey to the older ap
               architecture and so fixes the specification exceptions on
               z196 and older machines.
Reproduction:  Boot a kernel which has the 'Support up to 256 crypto
               adapters' patch included on a z196 or older machine. Depend
               on ap being a kernel module or static build into the kernel
               the kernel panics either at module insert or on kernel init
               during boot.

Upstream-Description:

               s390/zcrypt: fix specification exception on z196 during ap probe

               The older machines don't have the QCI instruction available.
               With support for up to 256 crypto cards the probing of each
               card has been extended to check card ids from 0 up to 255.
               For machines with QCI support there is a filter limiting the
               range of probed cards. The older machines (z196 and older)
               don't have this filter and so since support for 256 cards is
               in the driver all cards are probed. However, these machines
               also require to have the card id fit into 6 bits. Exceeding
               this limit results in a specification exception which happens
               on every kernel startup even when there is no crypto configured
               and used at all.

               This fix limits the range of probed crypto cards to 64 if
               there is no QCI instruction available to obey to the older
               ap architecture and so fixes the specification exceptions
               on z196 machines.

               Cc: stable@vger.kernel.org # v4.17+
               Fixes: af4a72276d49 ("s390/zcrypt: Support up to 256 crypto adapters.")
               Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
               Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Signed-off-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/s390/crypto/ap_bus.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/s390/crypto/ap_bus.c
+++ b/drivers/s390/crypto/ap_bus.c
@@ -250,7 +250,8 @@ static inline int ap_test_config(unsigne
 static inline int ap_test_config_card_id(unsigned int id)
 {
 	if (!ap_configuration)	/* QCI not supported */
-		return 1;
+		/* only ids 0...3F may be probed */
+		return id < 0x40 ? 1 : 0;
 	return ap_test_config(ap_configuration->apm, id);
 }