about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2015-09-23 20:22:33 +0000
committerRich Felker <dalias@aerifal.cx>2015-09-24 06:33:46 +0000
commitbd275378d35b3535bc8b8321780b00e486c36d96 (patch)
tree4022f57caccd5cea2da74796b6b01d0756d0fd81
parent4260dfe1ecc43d92d1e6d30daa0f22bd746d1740 (diff)
downloadmusl-bd275378d35b3535bc8b8321780b00e486c36d96.tar.gz
musl-bd275378d35b3535bc8b8321780b00e486c36d96.tar.xz
musl-bd275378d35b3535bc8b8321780b00e486c36d96.zip
avoid reading uninitialized memory in __map_file
The value of *size is not relevant in case of failure, but it's
better not to copy garbage from the stack into it.
(The compiler cannot see through the syscall, so optimization
was not affected by the unspecified value).
-rw-r--r--src/time/__map_file.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/time/__map_file.c b/src/time/__map_file.c
index d06a5814..b91eb8ed 100644
--- a/src/time/__map_file.c
+++ b/src/time/__map_file.c
@@ -11,9 +11,10 @@ const char unsigned *__map_file(const char *pathname, size_t *size)
 	const unsigned char *map = MAP_FAILED;
 	int fd = __sys_open(pathname, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
 	if (fd < 0) return 0;
-	if (!__syscall(SYS_fstat, fd, &st))
+	if (!__syscall(SYS_fstat, fd, &st)) {
 		map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+		*size = st.st_size;
+	}
 	__syscall(SYS_close, fd);
-	*size = st.st_size;
 	return map == MAP_FAILED ? 0 : map;
 }