[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC PATCH glibc 08/34] hurd: Disable O_TRUNC and FS_RETRY_MAGICAL i
From: |
Samuel Thibault |
Subject: |
Re: [RFC PATCH glibc 08/34] hurd: Disable O_TRUNC and FS_RETRY_MAGICAL in rtld |
Date: |
Mon, 3 Apr 2023 00:57:09 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Sergey Bugaev, le dim. 19 mars 2023 18:09:51 +0300, a ecrit:
> hurd/lookup-retry.c is compiled into rtld, the dynamic linker/loader. To
> avoid pulling in file_set_size, file_utimens, tty/ctty stuff, more
> string/memory code (memmove, strncpy, strcpy), and more strtoul/itoa
> code, compile out support for O_TRUNC and FS_RETRY_MAGICAL when building
> hurd/lookup-retry.c for rtld. None of that functionality is useful to
> rtld during startup anyway. Keep support for FS_RETRY_MAGICAL("/"),
> since that does not pull in much, and is required for following absolute
> symlinks.
>
> The large number of extra code being pulled into rtld was noticed by
> reviewing librtld.map & elf/librtld.os.map in the build tree.
>
> It is worth noting that once libc.so is loaded, the real __open, __stat,
> etc. replace the minimal versions used initially by rtld -- this is
> especially important in the Hurd port, where the minimal rtld versions
> do not use the dtable and just pass real Mach port names as fds. Thus,
> once libc.so is loaded, rtld will gain access to the full
> __hurd_file_name_lookup_retry () version, complete with FS_RETRY_MAGICAL
> support, which is important in case the program decides to
> dlopen ("/proc/self/fd/...") or some such.
>
> Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
> ---
> hurd/lookup-retry.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c
> index 8850c4fd..99c98104 100644
> --- a/hurd/lookup-retry.c
> +++ b/hurd/lookup-retry.c
> @@ -177,7 +177,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
>
> /* We got a successful translation. Now apply any open-time
> action flags we were passed. */
> -
> +#if !IS_IN (rtld)
> if (!err && (flags & O_TRUNC))
> {
> /* Asked to truncate the file. */
> @@ -189,6 +189,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
> __file_utimens (*result, atime, mtime);
> }
> }
> +#endif
>
> if (err)
> __mach_port_deallocate (__mach_task_self (), *result);
> @@ -214,6 +215,7 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
> file_name = &retryname[1];
> break;
>
> +#if !IS_IN (rtld)
> case 'f':
> if (retryname[1] == 'd' && retryname[2] == '/')
> {
> @@ -358,8 +360,9 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port)
> goto bad_magic;
> break;
>
> - default:
> bad_magic:
> +#endif /* !IS_IN (rtld) */
> + default:
> err = EGRATUITOUS;
> goto out;
> }
> --
> 2.39.2
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [RFC PATCH glibc 08/34] hurd: Disable O_TRUNC and FS_RETRY_MAGICAL in rtld,
Samuel Thibault <=