Re: [PATCH v2] selftests/proc: make proc-maps-race work with READ_IMPLIES_EXEC
Suren Baghdasaryan <[email protected]>
| Newsgroups | org.kvack.linux-mm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest |
|---|---|
| Message-ID | <CAJuCfpGTneUdh6xvZoeds0xt0Y=dc_xgOCninwqSv=HzVnPvoQ@mail.gmail.com> |
On Sat, Aug 8, 2026 at 1:04 PM Karl Mehltretter <[email protected]> wrote: > > test_maps_tearing_from_split times out when READ_IMPLIES_EXEC is set. > This happens by default on pre-ARMv6 CPUs, which lack no-execute support. > > split_vma() re-maps the first page with mod_info->prot | PROT_EXEC to > make it differ from its neighbours. With READ_IMPLIES_EXEC the original > mapping is already executable, so no split occurs and the test hangs > waiting for the modifier child. > > Use PROT_NONE for the split mapping, which always differs from its > readable neighbours. > > Fixes: beb69e817246 ("selftests/proc: add /proc/pid/maps tearing from vma split test") > Assisted-by: Codex:gpt-5.6-terra > Signed-off-by: Karl Mehltretter <[email protected]> Sorry for missing both versions. Acked-by: Suren Baghdasaryan <[email protected]> > --- > Tested on: > - QEMU versatilepb/ARM926EJ-S: maps and smaps fail before, pass after > - QEMU realview-eb-mpcore/ARM11MPCore: maps and smaps pass before and after > > Changes since v1: > - v1 went out without any recipients in To: and received no reply in 19 days. > - No functional change. reworked the commit message. > > v1: https://lore.kernel.org/all/[email protected]/ > > tools/testing/selftests/proc/proc-maps-race.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/proc/proc-maps-race.c b/tools/testing/selftests/proc/proc-maps-race.c > index 1026d8c400e1..415eccb70468 100644 > --- a/tools/testing/selftests/proc/proc-maps-race.c > +++ b/tools/testing/selftests/proc/proc-maps-race.c > @@ -490,7 +490,8 @@ static bool query_addr_at(int maps_fd, void *addr, > > static inline bool split_vma(FIXTURE_DATA(proc_maps_race) *self) > { > - return mmap(self->mod_info->addr, self->page_size, self->mod_info->prot | PROT_EXEC, > + /* PROT_NONE differs from both readable neighbors. */ > + return mmap(self->mod_info->addr, self->page_size, PROT_NONE, > MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0) != MAP_FAILED; > } > > -- > 2.53.0