about summary refs log tree commit diff
path: root/src/stat
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2020-02-12 17:23:29 -0500
committerRich Felker <dalias@aerifal.cx>2020-02-12 17:34:17 -0500
commitc9ebff4736128186121424364c1c62224b02aee3 (patch)
treeb139c394ce0831b1e933ae51f89c0ab33582fb22 /src/stat
parenta662220df547e5c2446518e74440a7d834f9ebe6 (diff)
downloadmusl-c9ebff4736128186121424364c1c62224b02aee3.tar.gz
musl-c9ebff4736128186121424364c1c62224b02aee3.tar.xz
musl-c9ebff4736128186121424364c1c62224b02aee3.zip
fix remaining direct use of stat syscalls outside fstatat.c
because struct stat is no longer assumed to correspond to the
structure used by the stat-family syscalls, it's not valid to make any
of these syscalls directly using a buffer of type struct stat.

commit 9493892021eac4edf1776d945bcdd3f7a96f6978 moved all logic around
this change for stat-family functions into fstatat.c, making the
others wrappers for it. but a few other direct uses of the syscall
were overlooked. the ones in tmpnam/tempnam are harmless since the
syscalls are just used to test for file existence. however, the uses
in fchmodat and __map_file depend on getting accurate file properties,
and these functions may actually have been broken one or more mips
variants due to removal of conversion hacks from syscall_arch.h.

as a low-risk fix, simply use struct kstat in place of struct stat in
the affected places.
Diffstat (limited to 'src/stat')
-rw-r--r--src/stat/fchmodat.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/stat/fchmodat.c b/src/stat/fchmodat.c
index be61bdf3..4ee00b0a 100644
--- a/src/stat/fchmodat.c
+++ b/src/stat/fchmodat.c
@@ -2,6 +2,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #include "syscall.h"
+#include "kstat.h"
 
 int fchmodat(int fd, const char *path, mode_t mode, int flag)
 {
@@ -10,7 +11,7 @@ int fchmodat(int fd, const char *path, mode_t mode, int flag)
 	if (flag != AT_SYMLINK_NOFOLLOW)
 		return __syscall_ret(-EINVAL);
 
-	struct stat st;
+	struct kstat st;
 	int ret, fd2;
 	char proc[15+3*sizeof(int)];