[Devel] [PATCH hci-8.1 v2 0/9] selftests/mm: broader MADV_DOEXEC coverage

Konstantin Khorenko khorenko at virtuozzo.com
Wed Oct 21 19:57:13 MSK 2026


Selftests for MADV_DOEXEC beyond the cases the fixes need: the sysctl
and the refused mappings, partial and attribute-carrying ranges (mlock,
DONTFORK, WIPEONFORK, userfaultfd, memory policy), the opt-in note
(missing, malformed, not in the last PT_NOTE), a preserved range under
the new stack, large, swapped and partly marked THP ranges, an exec from
a vfork() child, VM_MAYEXEC read from smaps and given back to the
copies, and a /proc/pid/mem write and a vhost kthread that keep the old
mm across the exec. Failing cases say why. Applies on top of "mm: allow
MADV_DOEXEC on VFIO BAR mappings".

All cases pass on release and debug kernels with the whole stack.

https://virtuozzo.atlassian.net/browse/VSTOR-150234

---
Changes in v2:
- "selftests/mm: say why a doexec case fails": when a page that should
  be gone after exec is still mapped, print the smaps entry at that
  address and its first byte. "MADV_DONTEXEC: range not preserved"
  failed once with "range still mapped" on a debug kernel with the whole
  stack and "vfio, exec: two mainline fixes that Oracle carries", and
  did not fail again, also not as the first run after a reboot. The
  cause is not found; the next failure will show whether the kernel kept
  the page or the new image mapped something else there.
- Same patch: the VFIO BAR case, skipped unless DOEXEC_VFIO_DEVICE is
  set, now says how to enable it, and the run_vmtests.sh help names
  the variable.
- Same patch: wrap a line over 100 columns that checkpatch flagged.
- New patch "selftests/mm: run repeated live updates through
  MADV_DOEXEC": a chain of preserving execs, each generation checking
  and rewriting THP-backed RAM with a long-term pin and, when
  DOEXEC_VFIO_DEVICE is set, a VFIO BAR, with an idle thread alive at
  every exec.
- New patch "selftests/mm: do not lose doexec failures": write()
  results are checked, so a clone race failure is not turned into a
  pass and a shared-mm child cannot stay blocked; the allocation sweep
  flushes its message before _exit(). Raised by the Sashiko review of
  v1 of "mm: keep DMA-pinned MADV_DOEXEC memory working across exec".
- Link to v1: http://lore.virtuozzo.com/20261014-b4-prep-khorenko-vstor-149847-5-doexec-selftests-v1-0-b23b454691db@virtuozzo.com

---
Konstantin Khorenko (9):
      selftests/mm: cover the MADV_DOEXEC interface and VMA attributes
      selftests/mm: cover the MADV_DOEXEC opt-in note and the new stack
      selftests/mm: cover large, swapped and partly marked THP ranges
      selftests/mm: check that MADV_DOEXEC refuses an exec from a vfork() child
      selftests/mm: check VM_MAYEXEC of MADV_DOEXEC ranges in smaps
      selftests/mm: check who can still reach the old mm of a preserving exec
      selftests/mm: say why a doexec case fails
      selftests/mm: run repeated live updates through MADV_DOEXEC
      selftests/mm: do not lose doexec failures

 tools/testing/selftests/mm/doexec.c       | 1799 +++++++++++++++++++++++++----
 tools/testing/selftests/mm/run_vmtests.sh |    4 +-
 2 files changed, 1574 insertions(+), 229 deletions(-)
---
base-commit: aece33e30a95e185591244ec5cadc8bd37e9f1fb
change-id: 20261014-b4-prep-khorenko-vstor-149847-5-doexec-selftests-496ac17b9688

Best regards,
--  
Konstantin Khorenko <khorenko at virtuozzo.com>



More information about the Devel mailing list