[PATCH v2 1/1] elf: Report when found libraries are rejected [BZ #25669]
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Tue Oct 7 16:51:53 GMT 2025
On 01/10/25 10:39, Ben Boeckel wrote:
> When debugging library loading issues with `LD_DEBUG`, it can be
> frustrating to see logs for files in a directory are searched, but the
> target library is skipped over without any indication of why. Add
> reporting to all paths which reject a library as `ENOENT`.
>
> Originally created for minimum-OS version detection, but that has since
> been removed in b46d250656 (Remove kernel version check, 2022-02-21).
> The remaining codepaths are still useful.
>
> Signed-off-by: Ben Boeckel <ben.boeckel@kitware.com>
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
> v1 -> v2:
> - fix BZ number
> - fix copypasta build failure
>
> ---
> elf/dl-load.c | 16 ++++++++++++++++
> 1 file changed, 16 insertions(+)
>
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 891b44966c..674bae2cbb 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1633,6 +1633,8 @@ open_verify (const char *name, int fd,
> 32-bit and 64-bit binaries can be run this might
> happen. */
> *found_other_class = true;
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" (incompatible ELF class)\n");
> __close_nocancel (fd);
> __set_errno (ENOENT);
> return -1;
> @@ -1671,6 +1673,8 @@ open_verify (const char *name, int fd,
> }
> if (! __glibc_likely (elf_machine_matches_host (ehdr)))
> {
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" (incompatible ELF machine)\n");
> __close_nocancel (fd);
> __set_errno (ENOENT);
> return -1;
> @@ -1706,12 +1710,19 @@ open_verify (const char *name, int fd,
> (phdr, ehdr->e_phnum, fbp->buf, fbp->len,
> loader, fd)))
> {
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" (incompatible ELF headers with the host)\n");
> __close_nocancel (fd);
> __set_errno (ENOENT);
> return -1;
> }
>
> }
> + else
> + {
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" (no such file)\n");
> + }
>
> return fd;
> }
> @@ -1822,6 +1833,11 @@ open_path (const char *name, size_t namelen, int mode,
> /* The shared object cannot be tested for being SUID
> or this bit is not set. In this case we must not
> use this object. */
> + if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_LIBS))
> + _dl_debug_printf (" refusing to load file=%s, the shared "
> + "object cannot be tested for being "
> + "SUID or the bit is not set\n",
> + buf);
> __close_nocancel (fd);
> fd = -1;
> /* We simply ignore the file, signal this by setting
More information about the Libc-alpha
mailing list