mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Drif Abdelmalek Mohamed Said <drifabdelmalekmohamedsaid@gmail.com>
To: Alexey Dobriyan <adobriyan@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Shuah Khan <shuah@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	Drif Abdelmalek Mohamed Said
	<drifabdelmalekmohamedsaid@gmail.com>
Subject: [PATCH] selftests/proc: proc-empty-vm: wait for child's SIGSEGV instead of sleep(1)
Date: Fri, 23 Oct 2026 19:34:33 +0100	[thread overview]
Message-ID: <20261023183434.9109-1-drifabdelmalekmohamedsaid@gmail.com> (raw)

The test had a TODO asking for a reliable way to know when the child's
munmap() has finished, and used sleep(1) in the meantime.

Unmapping the whole address space leaves the child with no code to run,
so it segfaults. Since it is traced, the SIGSEGV stop is reported to
the parent through waitpid(), which is exactly the signal the TODO
wanted. Wait for it there and drop the sleep and the TODO.

The stop is now consumed up front, so SIGKILL the child before the
final reap.

Fixes: 5bc73bb3451b ("proc: test how it holds up with mapping'less process")
Signed-off-by: Drif Abdelmalek Mohamed Said <drifabdelmalekmohamedsaid@gmail.com>
---
 tools/testing/selftests/proc/proc-empty-vm.c | 24 ++++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/proc/proc-empty-vm.c b/tools/testing/selftests/proc/proc-empty-vm.c
index b3f898aab4ab..cf65313a25f5 100644
--- a/tools/testing/selftests/proc/proc-empty-vm.c
+++ b/tools/testing/selftests/proc/proc-empty-vm.c
@@ -41,6 +41,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
+#include <signal.h>
 
 #ifdef __amd64__
 #define TEST_VSYSCALL
@@ -500,13 +501,18 @@ int main(void)
 #endif
 		return EXIT_FAILURE;
 	} else {
-		/*
-		 * TODO find reliable way to signal parent that munmap(2) completed.
-		 * Child can't do it directly because it effectively doesn't exist
-		 * anymore. Looking at child's VM files isn't 100% reliable either:
-		 * due to a bug they may not become empty or empty-like.
-		 */
-		sleep(1);
+		int wstatus;
+		pid_t p;
+
+		for (;;) {
+			p = waitpid(pid, &wstatus, 0);
+			if (p == -1 && errno == EINTR)
+				continue;
+			break;
+		}
+		assert(p == pid);
+		assert(WIFSTOPPED(wstatus));
+		assert(WSTOPSIG(wstatus) == SIGSEGV);
 
 		if (rv == EXIT_SUCCESS) {
 			rv = test_proc_pid_maps(pid);
@@ -525,10 +531,8 @@ int main(void)
 		}
 
 		/* Cut the rope. */
-		int wstatus;
+		kill(pid, SIGKILL);
 		waitpid(pid, &wstatus, 0);
-		assert(WIFSTOPPED(wstatus));
-		assert(WSTOPSIG(wstatus) == SIGSEGV);
 	}
 
 	return rv;
-- 
2.43.0


             reply	other threads:[~2026-10-23 18:34 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-23 18:34 Drif Abdelmalek Mohamed Said [this message]
2026-11-01 12:57 ` Alexey Dobriyan
2026-11-02  4:31 ` Andrew Morton
2026-11-02 19:14   ` DRIF ABDELMALEK MOHAMED SAID

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261023183434.9109-1-drifabdelmalekmohamedsaid@gmail.com \
    --to=drifabdelmalekmohamedsaid@gmail.com \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=shuah@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®