mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
hurd: Disable O_TRUNC and FS_RETRY_MAGICAL in rtld
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> Message-Id: <20230319151017.531737-9-bugaevc@gmail.com>
This commit is contained in:
parent
6a73ea505b
commit
543f0cfc9a
1 changed files with 5 additions and 2 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue