diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-03-02 17:06:02 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-06-22 12:09:52 -0300 |
commit | 52a5fe70a2c77935afe807fb6e904e512ddd894e (patch) | |
tree | e17476a3ebc60b2e00aea93f24227199caaee8d4 /elf | |
parent | a318262bc0081ab83e3f3c90e50462f99148605e (diff) | |
download | glibc-52a5fe70a2c77935afe807fb6e904e512ddd894e.tar.gz |
Use 64 bit time_t stat internally
For the legacy ABI with supports 32-bit time_t it calls the 64-bit
time directly, since the LFS symbols calls the 64-bit time_t ones
internally.
Checked on i686-linux-gnu and x86_64-linux-gnu.
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Diffstat (limited to 'elf')
-rw-r--r-- | elf/dl-load.c | 8 | ||||
-rw-r--r-- | elf/dl-misc.c | 4 | ||||
-rw-r--r-- | elf/dl-profile.c | 4 |
3 files changed, 8 insertions, 8 deletions
diff --git a/elf/dl-load.c b/elf/dl-load.c index 918ec7546c..a08df001af 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1946,11 +1946,11 @@ open_path (const char *name, size_t namelen, int mode, { /* We failed to open machine dependent library. Let's test whether there is any directory at all. */ - struct stat64 st; + struct __stat64_t64 st; buf[buflen - namelen - 1] = '\0'; - if (__stat64 (buf, &st) != 0 + if (__stat64_time64 (buf, &st) != 0 || ! S_ISDIR (st.st_mode)) /* The directory does not exist or it is no directory. */ this_dir->status[cnt] = nonexisting; @@ -1968,9 +1968,9 @@ open_path (const char *name, size_t namelen, int mode, /* This is an extra security effort to make sure nobody can preload broken shared objects which are in the trusted directories and so exploit the bugs. */ - struct stat64 st; + struct __stat64_t64 st; - if (__fstat64 (fd, &st) != 0 + if (__fstat64_time64 (fd, &st) != 0 || (st.st_mode & S_ISUID) == 0) { /* The shared object cannot be tested for being SUID diff --git a/elf/dl-misc.c b/elf/dl-misc.c index d4803bba4e..b256d792c6 100644 --- a/elf/dl-misc.c +++ b/elf/dl-misc.c @@ -43,11 +43,11 @@ void * _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot) { void *result = MAP_FAILED; - struct stat64 st; + struct __stat64_t64 st; int fd = __open64_nocancel (file, O_RDONLY | O_CLOEXEC); if (fd >= 0) { - if (__fstat64 (fd, &st) >= 0) + if (__fstat64_time64 (fd, &st) >= 0) { *sizep = st.st_size; diff --git a/elf/dl-profile.c b/elf/dl-profile.c index 35b03959bc..088c023d95 100644 --- a/elf/dl-profile.c +++ b/elf/dl-profile.c @@ -185,7 +185,7 @@ _dl_start_profile (void) { char *filename; int fd; - struct stat64 st; + struct __stat64_t64 st; const ElfW(Phdr) *ph; ElfW(Addr) mapstart = ~((ElfW(Addr)) 0); ElfW(Addr) mapend = 0; @@ -342,7 +342,7 @@ _dl_start_profile (void) return; } - if (__fstat64 (fd, &st) < 0 || !S_ISREG (st.st_mode)) + if (__fstat64_time64 (fd, &st) < 0 || !S_ISREG (st.st_mode)) { /* Not stat'able or not a regular file => don't use it. */ errstr = "%s: cannot stat file: %s\n"; |