[Bug 286502] RTLD deadlocks during IFUNC resolution
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286502] RTLD deadlocks during IFUNC resolution"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 01 May 2025 13:55:36 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=286502 Bug ID: 286502 Summary: RTLD deadlocks during IFUNC resolution Product: Base System Version: Unspecified Hardware: Any OS: Any Status: New Severity: Affects Many People Priority: --- Component: threads Assignee: threads@FreeBSD.org Reporter: dapeng.gao@cl.cam.ac.uk CC: kib@FreeBSD.org Steps to reproduce the problem: 1. _rtld_bind upgrades to a wlock to load filtees. 2. Call an ifunc resolver. 3. ifunc resolver re-enters _rtld_bind, causing deadlock. Notes: 1. libthr must be linked to reproduce this. 2. RTLD's own single-threaded locks fail silently under this situation, which is probably also a bug. Commands to run: cc filter.c -shared -o filter.so cc foo.c filter.so -shared -Wl,--auxiliary=filter.so -o foo.so -Wl,-rpath=. cc main.c foo.so -lthr -o main -Wl,-rpath=. ./main Reproducer: $ cat main.c void foo(); int main() { foo(); } $ cat foo.c static void foo_impl() { } static void *foo_resolver() { bar(); return &foo_impl; } void foo() __attribute__((ifunc("foo_resolver"))); $ cat filter.c void bar() { } -- You are receiving this mail because: You are the assignee for the bug.