[Bug 286505] dlopen deadlocks when target library contains IFUNC
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 286505] dlopen deadlocks when target library contains IFUNC"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 01 May 2025 16:46:11 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=286505
Bug ID: 286505
Summary: dlopen deadlocks when target library contains IFUNC
Product: Base System
Version: Unspecified
Hardware: Any
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: threads
Assignee: threads@FreeBSD.org
Reporter: dapeng.gao@cl.cam.ac.uk
CC: kib@FreeBSD.org
An ifunc resolver enters _rtld_bind, which attempts to acquire _rtld_bind_lock.
But since we are in the middle of dlopen, the lock has been acquired already,
hence deadlocking.
This is similar to bug #286502 but does not involve filter libraries.
Tested on AArch64 but should be reproducible on AMD64. pthread required.
Commands:
cc main.c -lthr -Wl,-rpath=. -o main
cc foo.c -shared -o foo.so
./main
Setup:
$ cat main.c
#include <dlfcn.h>
int main() {
dlopen("foo.so", RTLD_LAZY);
}
$ cat foo.c
#include <stdio.h>
static void foo_impl() {
}
static void *foo_resolver() {
puts("foo_resolver()");
return &foo_impl;
}
void foo() __attribute__((ifunc("foo_resolver")));
void (*foo_ptr)() = &foo;
--
You are receiving this mail because:
You are the assignee for the bug.