bug-hurd
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]