about summary refs log tree commit diff
path: root/src/stat
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2019-07-20 23:52:26 -0500
committerRich Felker <dalias@aerifal.cx>2019-07-21 00:58:10 -0400
commit0ce49d0a301b4142741b32773492af90f66ed3ca (patch)
tree4206ee87d08bd9705797d32b2d883d85d3ba837b /src/stat
parente53a91da582be156487daae39ab675e1fcb1848d (diff)
downloadmusl-0ce49d0a301b4142741b32773492af90f66ed3ca.tar.gz
musl-0ce49d0a301b4142741b32773492af90f66ed3ca.tar.xz
musl-0ce49d0a301b4142741b32773492af90f66ed3ca.zip
use the correct stat structure in the fstat path
commit 01ae3fc6d48f4a45535189b7a6db286535af08ca modified fstatat to
translate the kernel's struct stat ("kstat") into the libc struct stat.
To do this, it created a local kstat object, and copied its contents
into the user-provided object.

However, the commit neglected to update the fstat compatibility path and
its fallbacks. They continued to pass the user-supplied object to the
kernel, later overwiting it with the uninitialized memory in the local
temporary.
Diffstat (limited to 'src/stat')
-rw-r--r--src/stat/fstatat.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/stat/fstatat.c b/src/stat/fstatat.c
index 7de75462..d915fa10 100644
--- a/src/stat/fstatat.c
+++ b/src/stat/fstatat.c
@@ -67,16 +67,16 @@ static int fstatat_kstat(int fd, const char *restrict path, struct stat *restric
 	struct kstat kst;
 
 	if (flag==AT_EMPTY_PATH && fd>=0 && !*path) {
-		ret = __syscall(SYS_fstat, fd, st);
+		ret = __syscall(SYS_fstat, fd, &kst);
 		if (ret==-EBADF && __syscall(SYS_fcntl, fd, F_GETFD)>=0) {
-			ret = __syscall(SYS_fstatat, fd, path, st, flag);
+			ret = __syscall(SYS_fstatat, fd, path, &kst, flag);
 			if (ret==-EINVAL) {
 				char buf[15+3*sizeof(int)];
 				__procfdname(buf, fd);
 #ifdef SYS_stat
-				ret = __syscall(SYS_stat, buf, st);
+				ret = __syscall(SYS_stat, buf, &kst);
 #else
-				ret = __syscall(SYS_fstatat, AT_FDCWD, buf, st, 0);
+				ret = __syscall(SYS_fstatat, AT_FDCWD, buf, &kst, 0);
 #endif
 			}
 		}