HomeFreeBSD

libthr: Force the thr_wake() symbol to be resolved during initialization

Description

libthr: Force the thr_wake() symbol to be resolved during initialization

Otherwise the lock upgrade performed by rtld's load_filtees() can result
in infinite recursion, wherein:

  1. _rtld_bind() acquires the bind read lock,
  2. the source DSO's filtees haven't been loaded yet, so the lock upgrade in load_filtees() cause rtld to jump to _rtld_bind() and release the bind lock,
  3. _thr_rtld_lock_release() calls _thr_ast(), which calls thr_wake(), which hasn't been resolved yet,
  4. _rtld_bind() acquires the bind read lock in order to resolve thr_wake(),
  5. ...

See the linked pull request for an instance of this problem arising with
libsys. That particular instance is also worked around by commit
e7951d0b04e6.

Reported by: brooks
Reviewed by: kib
Pull Request: https://github.com/freebsd/freebsd-src/pull/908
MFC after: 1 week
Sponsored by: Innovate UK

Details

Provenance
markjAuthored on Feb 2 2024, 2:23 PM
Parents
rG4339f1e667ff: share/examples/IPv6/USAGE: remove
Branches
Unknown
Tags
Unknown