|
|
Message-Id: <1755910727.129cb9cinf.none@localhost>
Date: Fri, 22 Aug 2025 21:23:31 -0400
From: "Alex Xu (Hello71)" <alex_y_xu@...oo.ca>
To: musl@...ts.openwall.com
Subject: Satisfying DT_NEEDED from previous full path dlopens
Hi,
Previously, I posted https://www.openwall.com/lists/musl/2021/12/16/1
about this issue. As this is still an issue, I would like to re-raise
and summarize it.
Problem: With musl, if an application calls dlopen("/app/lib1.so");
dlopen("/app/lib2.so"), where lib2.so has DT_NEEDED: lib1.so, the second
dlopen will fail. glibc, FreeBSD, NetBSD, OpenBSD, and possibly
Haiku will match the dependency by DT_SONAME. Windows will match by
filename, and macOS will match by dylib ID.
Julia, OpenJDK, and Wine rely on this behavior.
Solutions:
1. Julia can't use DT_RPATH or DT_RUNPATH with $ORIGIN-relative paths
because the relative path contains the version number of lib2 which
is not known at compile time.
2. LD_LIBRARY_PATH requires a wrapper or re-exec, but Julia may be
embedded in another app which makes both inconvenient.
3. lib2 can be linked without lib1, but this is semantically wrong and
causes unclear error messages if lib1 is not loaded or a wrong version
is loaded.
4. The simplest solution is to allow DT_NEEDED to match DT_SONAME of
previous loaded libraries, matching other libcs.
Thanks,
Alex.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.