rtld: properly handle root directory in load path (bug 30435)

Message ID mvmy1loibpj.fsf@suse.de
State Committed
Commit e0189b25403f8b67e7a5513d6c33fb09cb2e5e20
Headers
Series rtld: properly handle root directory in load path (bug 30435) |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

Andreas Schwab May 16, 2023, 2:37 p.m. UTC
  Don't strip the trailing slash when checking for existence of a load path
element to handle the special case of the root directory.
---
 elf/dl-load.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Siddhesh Poyarekar May 25, 2023, 2:03 a.m. UTC | #1
On 2023-05-16 10:37, Andreas Schwab via Libc-alpha wrote:
> Don't strip the trailing slash when checking for existence of a load path
> element to handle the special case of the root directory.
> ---
>   elf/dl-load.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)

LGTM.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

> 
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 39c63ff1b3..2aa487b49a 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1859,7 +1859,7 @@ open_path (const char *name, size_t namelen, int mode,
>   		     test whether there is any directory at all.  */
>   		  struct __stat64_t64 st;
>   
> -		  buf[buflen - namelen - 1] = '\0';
> +		  buf[buflen - namelen] = '\0';
>   
>   		  if (__stat64_time64 (buf, &st) != 0
>   		      || ! S_ISDIR (st.st_mode))
  
Adhemerval Zanella Netto May 25, 2023, 12:33 p.m. UTC | #2
On 16/05/23 11:37, Andreas Schwab via Libc-alpha wrote:
> Don't strip the trailing slash when checking for existence of a load path
> element to handle the special case of the root directory.
> ---
>  elf/dl-load.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/elf/dl-load.c b/elf/dl-load.c
> index 39c63ff1b3..2aa487b49a 100644
> --- a/elf/dl-load.c
> +++ b/elf/dl-load.c
> @@ -1859,7 +1859,7 @@ open_path (const char *name, size_t namelen, int mode,
>  		     test whether there is any directory at all.  */
>  		  struct __stat64_t64 st;
>  
> -		  buf[buflen - namelen - 1] = '\0';
> +		  buf[buflen - namelen] = '\0';
>  
>  		  if (__stat64_time64 (buf, &st) != 0
>  		      || ! S_ISDIR (st.st_mode))

Which is difference between this and another fix for this very issue [1]?
And what about the testcase [2], this should really have a regression
tests.

[1] https://sourceware.org/pipermail/libc-alpha/2023-May/147956.html
[2] https://sourceware.org/pipermail/libc-alpha/2023-May/147957.html
  
Siddhesh Poyarekar May 25, 2023, 12:37 p.m. UTC | #3
On 2023-05-25 08:33, Adhemerval Zanella Netto wrote:
> 
> 
> On 16/05/23 11:37, Andreas Schwab via Libc-alpha wrote:
>> Don't strip the trailing slash when checking for existence of a load path
>> element to handle the special case of the root directory.
>> ---
>>   elf/dl-load.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/elf/dl-load.c b/elf/dl-load.c
>> index 39c63ff1b3..2aa487b49a 100644
>> --- a/elf/dl-load.c
>> +++ b/elf/dl-load.c
>> @@ -1859,7 +1859,7 @@ open_path (const char *name, size_t namelen, int mode,
>>   		     test whether there is any directory at all.  */
>>   		  struct __stat64_t64 st;
>>   
>> -		  buf[buflen - namelen - 1] = '\0';
>> +		  buf[buflen - namelen] = '\0';
>>   
>>   		  if (__stat64_time64 (buf, &st) != 0
>>   		      || ! S_ISDIR (st.st_mode))
> 
> Which is difference between this and another fix for this very issue [1]?
> And what about the testcase [2], this should really have a regression
> tests.
> 
> [1] https://sourceware.org/pipermail/libc-alpha/2023-May/147956.html
> [2] https://sourceware.org/pipermail/libc-alpha/2023-May/147957.html
> 

Ugh, sorry I missed them.  I'll review the test case for inclusion.

Thanks for keeping track!

Sid
  

Patch

diff --git a/elf/dl-load.c b/elf/dl-load.c
index 39c63ff1b3..2aa487b49a 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1859,7 +1859,7 @@  open_path (const char *name, size_t namelen, int mode,
 		     test whether there is any directory at all.  */
 		  struct __stat64_t64 st;
 
-		  buf[buflen - namelen - 1] = '\0';
+		  buf[buflen - namelen] = '\0';
 
 		  if (__stat64_time64 (buf, &st) != 0
 		      || ! S_ISDIR (st.st_mode))