]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
s390/facility: Disable compile time optimization for decompressor code
authorHeiko Carstens <hca@linux.ibm.com>
Wed, 4 Sep 2024 09:39:24 +0000 (11:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:11:49 +0000 (15:11 +0200)
[ Upstream commit 0147addc4fb72a39448b8873d8acdf3a0f29aa65 ]

Disable compile time optimizations of test_facility() for the
decompressor. The decompressor should not contain any optimized code
depending on the architecture level set the kernel image is compiled
for to avoid unexpected operation exceptions.

Add a __DECOMPRESSOR check to test_facility() to enforce that
facilities are always checked during runtime for the decompressor.

Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/s390/include/asm/facility.h

index e3aa354ab9f461176a3e271785b14814ec5f2c8b..bd7dc6fc139e640ae5d9e06631b6597a8d7032c2 100644 (file)
@@ -56,8 +56,10 @@ static inline int test_facility(unsigned long nr)
        unsigned long facilities_als[] = { FACILITIES_ALS };
 
        if (__builtin_constant_p(nr) && nr < sizeof(facilities_als) * 8) {
-               if (__test_facility(nr, &facilities_als))
-                       return 1;
+               if (__test_facility(nr, &facilities_als)) {
+                       if (!__is_defined(__DECOMPRESSOR))
+                               return 1;
+               }
        }
        return __test_facility(nr, &stfle_fac_list);
 }