From: Harald Freudenberger <freude@xxxxxxxxxxxxx> commit 32e8bd6423fc127d2b37bdcf804fd76af3bbec79 upstream. Instead of calling BUG() at runtime introduce and use a prototype for a non-existing function to produce a link error during compile when a not supported opcode is used with the __cpacf_query() or __cpacf_check_opcode() inline functions. Suggested-by: Heiko Carstens <hca@xxxxxxxxxxxxx> Signed-off-by: Harald Freudenberger <freude@xxxxxxxxxxxxx> Reviewed-by: Holger Dengler <dengler@xxxxxxxxxxxxx> Reviewed-by: Juergen Christ <jchrist@xxxxxxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Heiko Carstens <hca@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- arch/s390/include/asm/cpacf.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) --- a/arch/s390/include/asm/cpacf.h +++ b/arch/s390/include/asm/cpacf.h @@ -161,6 +161,13 @@ typedef struct { unsigned char bytes[16]; } cpacf_mask_t; +/* + * Prototype for a not existing function to produce a link + * error if __cpacf_query() or __cpacf_check_opcode() is used + * with an invalid compile time const opcode. + */ +void __cpacf_bad_opcode(void); + static __always_inline void __cpacf_query_rre(u32 opc, u8 r1, u8 r2, cpacf_mask_t *mask) { @@ -232,7 +239,7 @@ static __always_inline void __cpacf_quer __cpacf_query_rre(CPACF_PRNO, 2, 4, mask); break; default: - BUG(); + __cpacf_bad_opcode(); } } @@ -257,7 +264,8 @@ static __always_inline int __cpacf_check case CPACF_KMA: return test_facility(146); /* check for MSA8 */ default: - BUG(); + __cpacf_bad_opcode(); + return 0; } } Patches currently in stable-queue which might be from freude@xxxxxxxxxxxxx are queue-5.15/s390-ap-fix-crash-in-ap-internal-function-modify_bitmap.patch queue-5.15/s390-cpacf-make-use-of-invalid-opcode-produce-a-link-error.patch queue-5.15/s390-cpacf-split-and-rework-cpacf-query-functions.patch