This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Dummy pthread functions in libc considered harmful


On Wed, Sep 02, 2015 at 03:15:57PM -0400, Carlos O'Donell wrote:
> On 08/31/2015 10:59 AM, Rich Felker wrote:
> > On Mon, Aug 31, 2015 at 05:54:46PM +0300, Alexander Monakov wrote:
> >> On Tue, 25 Aug 2015, Rich Felker wrote:
> >>>> (however when libpthread is not linked in, you know that pthread_mutex_lock is
> >>>> not operating on shared memory: you'd need pthread_mutexattr_setpshared, which
> >>>> is not provided in libc.so.6)
> >>>
> >>> This is false. The process that maps and locks the process-shared
> >>> mutex need not be the one that called pthread_mutex_init. I ran into
> >>> this issue when optimizing static linking; you can't omit
> >>> process-shared code when the program doesn't reference
> >>> pthread_mutexattr_setpshared, because it could get the mutex from
> >>> another program -- that's the whole point of having it be
> >>> process-shared.
> >>
> >> As a result, a libc "stub" mutex must:
> >>
> >>  - contain a full implementation for process-shared mutexes
> >>  - for non-shared mutexes in single-threaded processes, modify them
> >>    consistently with non-stub implementation (but modifications need not be
> >>    atomic)
> >>
> >> Does Glibc do the former? (the bug report is about Glibc not doing the latter)
> > 
> > I may be wrong, but my impression is that glibc does not support this
> > usage for process-shared mutexes (omitting -lpthread) and is relying
> > on the POSIX rule that you may need -lpthread to get pthread_*
> > functions, and interpreting this to mean that it's okay to have a
> > broken/non-conforming version of pthread_mutex_* in libc.so. If so, I
> > think this is technically correct, but risky since applications may be
> > assuming that, if the symbol exists (e.g. via configure checks) then
> > it works.
> 
> Correct, we consider the test case invalid because you failed to
> link with -lpthread, and call it a QoI issue.
> 
> The problem is that it's a dangerous QoI issue that we should fix.
> 
Correct, we should handle process-shared mutex... separately from
optimizing atomics and nonshared mutexes.

We could theoretically use stubs and switch only when there is call of
mmap(...SHARED), or create thread which would probably be pointless as
that would always happen with process-shared mutexes.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]