From 2ce23b1f76721e44646fc98ba4e24a113a6d5972 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Wed, 6 Mar 2024 09:24:22 +0200 Subject: [PATCH] libc posix_spawn(): explain why rtld can be used after fork Sponsored by: The FreeBSD Foundation MFC after: 1 week --- lib/libc/gen/posix_spawn.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/libc/gen/posix_spawn.c b/lib/libc/gen/posix_spawn.c index d405517ba68..ee2ce05ff31 100644 --- a/lib/libc/gen/posix_spawn.c +++ b/lib/libc/gen/posix_spawn.c @@ -325,6 +325,11 @@ do_posix_spawn(pid_t *pid, const char *path, * ideal vfork(2) if we get an EINVAL from rfork -- this should only * happen with newer libc on older kernel that doesn't accept * RFSPAWN. + * + * Combination of vfork() (or its equivalent rfork() form) and + * a special property of the libthr rtld locks ensure that + * rtld is operational in the child. In particular, libthr + * rtld locks do not store owner' tid into the lock word. */ #ifdef _RFORK_THREAD_STACK_SIZE /*