diff --git a/patches.suse/s390-ap-fix-crash-on-older-machines-based-on-QCI-info-missing.patch b/patches.suse/s390-ap-fix-crash-on-older-machines-based-on-QCI-info-missing.patch new file mode 100644 index 0000000..a32ab43 --- /dev/null +++ b/patches.suse/s390-ap-fix-crash-on-older-machines-based-on-QCI-info-missing.patch @@ -0,0 +1,80 @@ +From: Harald Freudenberger +Date: Fri, 15 Jul 2022 12:23:48 +0200 +Subject: s390/ap: fix crash on older machines based on QCI info missing +Git-commit: 0fef40be5d1f8e7af3d61e8827a63c5862cd99f7 +Patch-mainline: v6.0-rc2 +References: git-fixes bsc#1210947 + +On older z series machines (z12 and older) there is no QCI info +available. The AP code took care of this and the AP bus scan then +switched to simple probing via TAPQ. + +With commit +283915850a44 ("s390/ap: notify drivers on config changed and scan complete callbacks") +some code was introduced which silently assumed that the QCI info is +always available. However, with KVM simulating an older machine (z12) +the result was a kernel crash. Funnily the same crash does not happen +on LPAR - maybe because NULL is a valid pointer and reading some data +from address 0 also works fine. + +This fix now improves the code to be aware that the QCI instruction +may not be available on older machines and thus the two pointers to +QCI info structs may simple be NULL. + +However, on a machine not providing the QCI info the two callbacks to +the zcrypt device drivers on_config_changed() and on_scan_complete() +provide parameters which are pointers to a QCI info struct. +These both callbacks are NOT served if there is no QCI info available. +The only consumer of these callbacks is the vfio device driver. This +driver only supports CEX4 and higher. All physical machines which are +able to provide CEX4 cards have QCI support available. So there is +no sense in for example fill the QCI info struct by hand with looping +over cards and queues and TAPQ each APQN. + +Signed-off-by: Harald Freudenberger +Signed-off-by: Tony Krowiak +Cc: stable@vger.kernel.org +Fixes: 283915850a44 ("s390/ap: notify drivers on config changed and scan complete callbacks") +Signed-off-by: Alexander Gordeev +Acked-by: Miroslav Franc +--- + drivers/s390/crypto/ap_bus.c | 3 +++ + drivers/s390/crypto/ap_bus.h | 4 ++++ + 2 files changed, 7 insertions(+) + +diff --git a/drivers/s390/crypto/ap_bus.c b/drivers/s390/crypto/ap_bus.c +index 8f1d1cf23d44..59ac98f2bd27 100644 +--- a/drivers/s390/crypto/ap_bus.c ++++ b/drivers/s390/crypto/ap_bus.c +@@ -2086,6 +2086,9 @@ static inline void ap_scan_adapter(int ap) + */ + static bool ap_get_configuration(void) + { ++ if (!ap_qci_info) /* QCI not supported */ ++ return false; ++ + memcpy(ap_qci_info_old, ap_qci_info, sizeof(*ap_qci_info)); + ap_fetch_qci_info(ap_qci_info); + +diff --git a/drivers/s390/crypto/ap_bus.h b/drivers/s390/crypto/ap_bus.h +index 0c40af157df2..0f17933954fb 100644 +--- a/drivers/s390/crypto/ap_bus.h ++++ b/drivers/s390/crypto/ap_bus.h +@@ -148,12 +148,16 @@ struct ap_driver { + /* + * Called at the start of the ap bus scan function when + * the crypto config information (qci) has changed. ++ * This callback is not invoked if there is no AP ++ * QCI support available. + */ + void (*on_config_changed)(struct ap_config_info *new_config_info, + struct ap_config_info *old_config_info); + /* + * Called at the end of the ap bus scan function when + * the crypto config information (qci) has changed. ++ * This callback is not invoked if there is no AP ++ * QCI support available. + */ + void (*on_scan_complete)(struct ap_config_info *new_config_info, + struct ap_config_info *old_config_info); + diff --git a/series.conf b/series.conf index 8f5c401..54cdc38 100644 --- a/series.conf +++ b/series.conf @@ -32959,6 +32959,7 @@ patches.suse/RDMA-cxgb4-fix-accept-failure-due-to-increased-cpl_t.patch patches.suse/powerpc-pci-Fix-get_phb_number-locking.patch patches.suse/s390-hypfs-avoid-error-message-under-KVM.patch + patches.suse/s390-ap-fix-crash-on-older-machines-based-on-QCI-info-missing.patch patches.suse/kbuild-fix-the-modules-order-between-drivers-and-lib.patch patches.suse/cifs-remove-unused-server-parameter-from-calc_smb_size-.patch patches.suse/cifs-remove-useless-parameter-is_fsctl-from-SMB2_ioctl-.patch