Bug 27744 - Support different libpthread/ld.so load orders in libthread_db
Summary: Support different libpthread/ld.so load orders in libthread_db
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: nptl (show other bugs)
Version: 2.33
: P2 normal
Target Milestone: 2.34
Assignee: Florian Weimer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-04-16 15:20 UTC by Florian Weimer
Modified: 2021-05-06 13:05 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Florian Weimer 2021-04-16 15:20:14 UTC
This commit:

commit 1daccf403b1bd86370eb94edca794dc106d02039
Author: Florian Weimer <fweimer@redhat.com>
Date:   Mon Nov 16 19:33:30 2020 +0100

    nptl: Move stack list variables into _rtld_global
    
    Now __thread_gscope_wait (the function behind THREAD_GSCOPE_WAIT,
    formerly __wait_lookup_done) can be implemented directly in ld.so,
    eliminating the unprotected GL (dl_wait_lookup_done) function
    pointer.
    
    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

exposed a GDB limitation: libthread_db is loaded once GDB encounters libpthread, and at this point, ld.so may not have been loaded yet. As a result, _rtld_global cannot be accessed by regular means from libthread_db.
Comment 1 Florian Weimer 2021-04-16 15:58:31 UTC
Patch posted: https://sourceware.org/pipermail/libc-alpha/2021-April/125137.html
Comment 2 Sourceware Commits 2021-04-21 11:45:22 UTC
The master branch has been updated by Florian Weimer <fw@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a64afc225240b2b27129ccfb0516d7c958b98040

commit a64afc225240b2b27129ccfb0516d7c958b98040
Author: Florian Weimer <fweimer@redhat.com>
Date:   Wed Apr 21 11:50:43 2021 +0200

    nptl_db: Support different libpthread/ld.so load orders (bug 27744)
    
    libthread_db is loaded once GDB encounters libpthread, and at this
    point, ld.so may not have been processed by GDB yet. As a result,
    _rtld_global cannot be accessed by regular means from libthread_db.
    To make this work until GDB can be fixed, acess _rtld_global through
    a pointer stored in libpthread.
    
    The new test does not reproduce bug 27744 with
    --disable-hardcoded-path-in-tests, but is still a valid smoke test.
    With --enable-hardcoded-path-in-tests, it is necessary to avoid
    add-symbol-file because this can tickle a GDB bug.
    
    Fixes commit 1daccf403b1bd86370eb94edca794dc106d02039 ("nptl: Move
    stack list variables into _rtld_global").
    
    Tested-by: Emil Velikov <emil.velikov@collabora.com>
Comment 3 Florian Weimer 2021-04-21 11:46:05 UTC
Fixed for glibc 2.34.
Comment 4 Sourceware Commits 2021-04-30 07:19:39 UTC
The release/2.33/master branch has been updated by Florian Weimer <fw@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=ea299b62e83cc38b0d910bbd1a879f7d1f836e96

commit ea299b62e83cc38b0d910bbd1a879f7d1f836e96
Author: Florian Weimer <fweimer@redhat.com>
Date:   Wed Apr 21 11:50:43 2021 +0200

    nptl_db: Support different libpthread/ld.so load orders (bug 27744)
    
    libthread_db is loaded once GDB encounters libpthread, and at this
    point, ld.so may not have been processed by GDB yet. As a result,
    _rtld_global cannot be accessed by regular means from libthread_db.
    To make this work until GDB can be fixed, acess _rtld_global through
    a pointer stored in libpthread.
    
    The new test does not reproduce bug 27744 with
    --disable-hardcoded-path-in-tests, but is still a valid smoke test.
    With --enable-hardcoded-path-in-tests, it is necessary to avoid
    add-symbol-file because this can tickle a GDB bug.
    
    Fixes commit 1daccf403b1bd86370eb94edca794dc106d02039 ("nptl: Move
    stack list variables into _rtld_global").
    
    Tested-by: Emil Velikov <emil.velikov@collabora.com>
    (cherry picked from commit a64afc225240b2b27129ccfb0516d7c958b98040)