mailing list of musl libc
 help / color / mirror / code / Atom feed
* Re: Hangup calling setuid() from vfork() child
@ 2019-09-30 20:45 Joshua Hudson
  2019-09-30 22:47 ` Rich Felker
  2019-10-01  5:54 ` Florian Weimer
  0 siblings, 2 replies; 10+ messages in thread
From: Joshua Hudson @ 2019-09-30 20:45 UTC (permalink / raw)
  To: musl

> Basically, the vfork() child is in an invalid state and this cannot be repaired without damaging the parent.

Works on glibc just fine.

setuid() is on the list of signal-safe functions.

http://man7.org/linux/man-pages/man7/signal-safety.7.html

How about you call getpid() and check if you're on the process you
think you're on before calling __synccall? Somebody else might have
done syscall(SYS_fork).

> So you might want to enable memory overcommit.

I'm tired of paying the page fault penalty in the parent. It has a
majority of system RAM, and most of the pages are CoW long after the
vfork child hits execve.


^ permalink raw reply	[flat|nested] 10+ messages in thread
* Re: Hangup calling setuid() from vfork() child
@ 2019-09-30 19:57 Joshua Hudson
  0 siblings, 0 replies; 10+ messages in thread
From: Joshua Hudson @ 2019-09-30 19:57 UTC (permalink / raw)
  To: musl

>It's simpler than that. The (retired) specification for vfork did not
>allow anything but _exit or execve in the child after vfork, so the
>issue doesn't arise and it works perfectly fine with threads as long
>as you follow the requirement.

I'm reading the man page for vfork and it says what it actually does, that
is overlay the child process on the memory of the calling process.

posix_spawn can't be used in the originating location, and fork() is
hogging too much memory.


^ permalink raw reply	[flat|nested] 10+ messages in thread
* Hangup calling setuid() from vfork() child
@ 2019-09-30 15:29 Joshua Hudson
  2019-09-30 17:39 ` Markus Wichmann
  2019-09-30 17:41 ` Rich Felker
  0 siblings, 2 replies; 10+ messages in thread
From: Joshua Hudson @ 2019-09-30 15:29 UTC (permalink / raw)
  To: musl

If there is more than one thread and vfork() calls setuid(), musl libc hangs up.

void *thfunction(void*ig) {sleep(1000);returnNULL;}

int main()
{
    pthread_t id;
    pthread_create(&id, NULL, thfunction, NULL);
    if (vfork() == 0) {
        setuid(0); /* hangup */
        _exit(0);
    }
}


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-10-01 11:44 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-30 20:45 Hangup calling setuid() from vfork() child Joshua Hudson
2019-09-30 22:47 ` Rich Felker
2019-10-01  5:54 ` Florian Weimer
2019-10-01  9:29   ` Szabolcs Nagy
2019-10-01 11:44     ` Rich Felker
  -- strict thread matches above, loose matches on Subject: below --
2019-09-30 19:57 Joshua Hudson
2019-09-30 15:29 Joshua Hudson
2019-09-30 17:39 ` Markus Wichmann
2019-09-30 17:43   ` Rich Felker
2019-09-30 17:41 ` Rich Felker

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).