|
Message-ID: <CAH4OOv6b3AnNJOb_3ezW2GSBZdghrXGAp2BMFpH-jxbGW-wscQ@mail.gmail.com> Date: Tue, 21 Dec 2021 10:56:33 -0800 From: Farid Zakaria <fmzakari@...c.edu> To: musl@...ts.openwall.com Cc: "Scogland, Tom" <scogland1@...l.gov>, Carlos Maltzahn <carlosm@...c.edu> Subject: Dynamic linking of NEEDED with absolute path differs than that of glibc Hello! I am working, along with Tom <scogland1@...l.gov> on a contribution to patchelf[1] that takes all the NEEDED from downstream shared object dependencies and lifts them to the top executable. I then change the NEEDED in the top executable to be absolute paths. This seems to work as expected in glibc. Please use this example for demonstrations: Here I have two shared objects libbar and libfoo, where foo depends on bar. ``` > patchelf --print-needed libbar.so libc.so.6 > patchelf --print-soname libbar.so libbar.so > patchelf --print-needed libfoo.so libbar.so libc.so.6 ``` I then add libbar and libfoo to another executable but reference them in NEEDED with explicit paths. ``` > patchelf --print-needed tests/scratch/replace-add-needed/simple /some-fixed-path/libbar.so /some-fixed-path/libfoo.so /lib/x86_64-linux-gnu/libc.so.6 ``` glibc seems to happily link this and the executable runs. ``` ldd ./tests/scratch/replace-add-needed/simple linux-vdso.so.1 (0x00007ffc98d98000) /some-fixed-path/libbar.so (0x00007f269b6d3000) /some-fixed-path/llibfoo.so (0x00007f269b6ce000) /lib/x86_64-linux-gnu/libc.so.6 (0x00007f269b509000) /lib64/ld-linux-x86-64.so.2 (0x00007f269c6e3000) ``` If I do the same however with musl it doesn't seem to link and complains about not finding libbar.so ``` ldd ./tests/scratch/replace-add-needed/simple /lib/ld-musl-x86_64.so.1 (0x7f04dd7cd000) /some-fixed-path/libbar.so (0x7f04dc7bf000) /some-fixed-path/libfoo.so (0x7f04dc7ba000) libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f04dd7cd000) Error loading shared library libbar.so: No such file or directory (needed by /some-fixed-path/libfoo.so) ``` Tom helped track this down due to the shortname assignment behavior[2] This is clearly safer than what it was doing before that, but would musl be open to either: 1 - Using the contents of DT_SONAME if set, which matches the behavior of glibc at least from observation, or 2- Using a shortname based on the basename of the path even for path-based loading? It also seems that there are issues similar to this on the mailing list recently as well [3] and a bit of a discussion from Rich on the Julia Github repository that sounds similar [4]. Thank you! Farid Zakaria [1] https://github.com/NixOS/patchelf [2] https://github.com/rofl0r/musl/commit/0420b874465db7544a9e1f320969b4920c9405d8 [3] https://www.openwall.com/lists/musl/2021/12/16/1 [4] https://github.com/JuliaLang/julia/issues/40556#issuecomment-929713727
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.