Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20191001114400.GD16318@brightrain.aerifal.cx>
Date: Tue, 1 Oct 2019 07:44:00 -0400
From: Rich Felker <dalias@...c.org>
To: musl@...ts.openwall.com, Joshua Hudson <joshudson@...il.com>
Subject: Re: Re: Hangup calling setuid() from vfork() child

On Tue, Oct 01, 2019 at 11:29:08AM +0200, Szabolcs Nagy wrote:
> * Florian Weimer <fweimer@...hat.com> [2019-10-01 07:54:56 +0200]:
> > * Joshua Hudson:
> > 
> > >> Basically, the vfork() child is in an invalid state and this cannot
> > >> be repaired without damaging the parent.
> > >
> > > Works on glibc just fine.
> > 
> > Are you sure it's changing the credentials of the right TIDs?
> 
> i don't think it works on glibc (or any other linux
> libc for that matter) reliably because the child uses
> parent data structures to sync with concurrent threads
> and the child also clobbers the errno of the parent.
> 
> but it will work usually on glibc because the signals
> are sent with tgkill which uses getpid + target tid and
> that will just fail because of the pid mismatch, i think
> glibc will only deadlock if the parent concurrently
> fiddles with the thread stack list.
> 
> in any case setuid is not supportable after vfork on linux
                                                    ~~~~~~~~

Note that this entire problem would go away if Linux would finally
give us a working multithreaded credentials-change syscall...

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.