[PATCH v4 01/14] elf: Default to ENOENT error in _dl_map_new_object

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Mon Mar 17 12:10:05 GMT 2025



On 02/02/25 18:12, Florian Weimer wrote:
> The errno leak was originally observed as elf/tst-rtld-does-not-exist,
> elf/tst-rtld-dash-dash test failures on an AArch64 system without
> protection keys support: the ENOSPC error from the pkey_alloc system
> call leaked into the printed error message, causing the test failure.
> Without the pkey_alloc call, errno is 0.
> 
> Setting ENOENT unconditionally still changes the error message,
> so update the test expectations accordingly.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  elf/dl-load.c                  | 5 +++++
>  elf/tst-rtld-dash-dash.sh      | 2 +-
>  elf/tst-rtld-does-not-exist.sh | 2 +-
>  3 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 4998652adf..e328d678b4 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1939,6 +1939,11 @@ _dl_map_new_object (struct link_map *loader, const char *name,
>    /* Will be true if we found a DSO which is of the other ELF class.  */
>    bool found_other_class = false;
>  
> +  /* Default errno to ENOENT.  The code may not end up doing any
> +     system calls before setting fd to -1 because there are no search
> +     paths.  */
> +  __set_errno (ENOENT);
> +
>  #ifdef SHARED
>    /* Give the auditing libraries a chance to change the name before we
>       try anything.  */
> diff --git a/elf/tst-rtld-dash-dash.sh b/elf/tst-rtld-dash-dash.sh
> index 5b00110d38..cf31552168 100644
> --- a/elf/tst-rtld-dash-dash.sh
> +++ b/elf/tst-rtld-dash-dash.sh
> @@ -31,7 +31,7 @@ echo "output (with expected error):"
>  cat "$tmp_out"
>  
>  if test $status -eq 127 \
> -	&& grep -q "^--program-does-not-exist: error while loading shared libraries: --program-does-not-exist: cannot open shared object file$" "$tmp_out" \
> +	&& grep -q "^--program-does-not-exist: error while loading shared libraries: --program-does-not-exist: cannot open shared object file: No such file or directory$" "$tmp_out" \
>  	&& test "$(wc -l < "$tmp_out")" -eq 1 ; then
>      status=0
>  else
> diff --git a/elf/tst-rtld-does-not-exist.sh b/elf/tst-rtld-does-not-exist.sh
> index 9f404aecbf..418cfb445e 100644
> --- a/elf/tst-rtld-does-not-exist.sh
> +++ b/elf/tst-rtld-does-not-exist.sh
> @@ -31,7 +31,7 @@ echo "output (with expected error):"
>  cat "$tmp_out"
>  
>  if test $status -eq 127 \
> -	&& grep -q "^program-does-not-exist: error while loading shared libraries: program-does-not-exist: cannot open shared object file$" "$tmp_out" \
> +	&& grep -q "^program-does-not-exist: error while loading shared libraries: program-does-not-exist: cannot open shared object file: No such file or directory$" "$tmp_out" \
>  	&& test "$(wc -l < "$tmp_out")" -eq 1 ; then
>      status=0
>  else



More information about the Libc-alpha mailing list