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
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
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))
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
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
@@ -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))