summary refs log tree commit diff
path: root/pkgs/development/libraries/libosmscout
diff options
context:
space:
mode:
authorMaximilian Bosch <maximilian@mbosch.me>2022-01-03 23:19:37 +0100
committerMaximilian Bosch <maximilian@mbosch.me>2022-02-27 10:26:53 +0100
commit748faeb623035c1360eeb6dc4b05abf5defd721c (patch)
tree175f31753e9cf3f74d29d7d22321c45431421dc9 /pkgs/development/libraries/libosmscout
parent6b98a5e51256e8b9d7a5c30f93a8d4178554013f (diff)
glibc: don't hide symbol `__nss_files_fopen`
I realized that `libredirect` doesn't wrap `__nss_files_fopen` anymore
which subsequently broke the `checkPhase` of `pkgs.openssh`[1] which was
implemented in 85c63a515d21c8fa27a561a9b8a1db5b18118e39.

The reason for that is what `libc_hidden_{def,proto}` are used for, to
quote `libc-symbols.h`[2]:

    The following macros are used for PLT bypassing within libc.so
    (and if needed other libraries similarly).

This basically means that these symbols are altered in a way so that
they cannot be wrapped by `libredirect` even though it re-defines
`__nss_files_fopen` while being loaded at first with `LD_PRELOAD`.

The problem was caused by a change in 2.34[3] where the `files`-module
for NSS isn't loaded from `libnss_files.so.2` anymore, but the relevant
symbols are directly obtained from `libc.so.6` since a lot of glibc's
APIs were merged into `libc.so.6` before.

As this would effectively break `libredirect` whenever it tries to wrap
C APIs that interact with NSS (e.g. to use `getpwnam(3)`), I decided to
undo this change for `__nss_files_fopen`.

[1] https://hydra.nixos.org/build/160688523
[2] https://sourceware.org/git/?p=glibc.git;a=blob;f=include/libc-symbols.h;h=d41ecf4384d07f9108698dba1d4e9e6a7a9b975f;hb=ae37d06c7d127817ba43850f0f898b793d42aea7
[3] https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=f9c8b11ed7726b858cd7b7cea0d3d7c5233d78cf;hp=6212bb67f4695962748a5981e1b9fea105af74f6
Diffstat (limited to 'pkgs/development/libraries/libosmscout')
0 files changed, 0 insertions, 0 deletions