diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2023-04-29 16:13:54 +0300 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2023-04-29 16:58:10 +0200 |
commit | f56ad6174c62aa38f7edf68167d620482b776dc9 (patch) | |
tree | 9c0750753da4a89c074d0480b232883e249183e6 /hurd/lookup-retry.c | |
parent | 89f1e04174a6b6548d19f7f301ddcc8ab91d91df (diff) | |
download | glibc-f56ad6174c62aa38f7edf68167d620482b776dc9.zip glibc-f56ad6174c62aa38f7edf68167d620482b776dc9.tar.gz glibc-f56ad6174c62aa38f7edf68167d620482b776dc9.tar.bz2 |
hurd: Fix FS_RETRY_MAGICAL "machtype" handling
We need to set file_name, not update retryname. This is what the other
branches do.
Before this change, any attempt to access such a file would segfault due
to file_name being unset:
$ settrans -ac /tmp/my-machtype /hurd/magic machtype
$ cat /tmp/my-machtype
Segmentation fault
Checked on i686-gnu.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
Message-Id: <20230429131354.2507443-7-bugaevc@gmail.com>
Diffstat (limited to 'hurd/lookup-retry.c')
-rw-r--r-- | hurd/lookup-retry.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/hurd/lookup-retry.c b/hurd/lookup-retry.c index 99c9810..62f94bb 100644 --- a/hurd/lookup-retry.c +++ b/hurd/lookup-retry.c @@ -277,7 +277,6 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) error_t err; struct host_basic_info hostinfo; mach_msg_type_number_t hostinfocnt = HOST_BASIC_INFO_COUNT; - char *p; /* XXX want client's host */ if (err = __host_info (__mach_host_self (), HOST_BASIC_INFO, (integer_t *) &hostinfo, @@ -288,13 +287,11 @@ __hurd_file_name_lookup_retry (error_t (*use_init_port) err = EGRATUITOUS; goto out; } - p = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0); - *--p = '/'; - p = _itoa (hostinfo.cpu_type, &retryname[8], 10, 0); - if (p < retryname) + file_name = _itoa (hostinfo.cpu_subtype, &retryname[8], 10, 0); + *--file_name = '/'; + file_name = _itoa (hostinfo.cpu_type, file_name, 10, 0); + if (file_name < retryname) abort (); /* XXX write this right if this ever happens */ - if (p > retryname) - memmove (retryname, p, strlen(p) + 1); startdir = *result; } else |