On Wed, Sep 9, 2026 at 1:09 PM Chris Chiu <[email protected]> wrote: > > 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 >
Gentle ping.
