Hash MMU maps execute-only pages as readable at the PTE level, so reading from a PROT_EXEC-only mapping does not fault there. The exec_prot test currently treats that as a failure, while the rest of the permission checks are still valid.
Use the existing using_hash_mmu() helper and skip only the read-on- execute-only subtest on Hash MMU. Keep the rest of the test unchanged so the fix stays local to the unsupported execute-only-read expectation. Signed-off-by: Chris Chiu <[email protected]> --- .../testing/selftests/powerpc/mm/exec_prot.c | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/powerpc/mm/exec_prot.c b/tools/testing/selftests/powerpc/mm/exec_prot.c index db75b2225de1..bd44f49d8449 100644 --- a/tools/testing/selftests/powerpc/mm/exec_prot.c +++ b/tools/testing/selftests/powerpc/mm/exec_prot.c @@ -108,11 +108,14 @@ static int check_exec_fault(int rights) static int test(void) { struct sigaction segv_act, trap_act; + bool hash_mmu; int i; /* Skip the test if the CPU doesn't support Radix */ SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_00)); + FAIL_IF(using_hash_mmu(&hash_mmu)); + /* Check if pkeys are supported */ pkeys_supported = pkeys_unsupported() == 0; @@ -167,13 +170,17 @@ static int test(void) * Read an instruction word from the address when the page * is execute only. This should generate an access fault. */ - fault_code = -1; - remaining_faults = 1; - printf("Testing read on --x, should fault..."); - FAIL_IF(mprotect(insns, pgsize, PROT_EXEC) != 0); - i = *fault_addr; - FAIL_IF(remaining_faults != 0 || !is_fault_expected(fault_code)); - printf("ok!\n"); + if (!hash_mmu) { + fault_code = -1; + remaining_faults = 1; + printf("Testing read on --x, should fault..."); + FAIL_IF(mprotect(insns, pgsize, PROT_EXEC) != 0); + i = *fault_addr; + FAIL_IF(remaining_faults != 0 || !is_fault_expected(fault_code)); + printf("ok!\n"); + } else { + printf("Testing read on --x, skipped on Hash MMU\n"); + } /* * Write an instruction word to the address when the page -- 2.43.0

