diff options
author | Szabolcs Nagy <nsz@port70.net> | 2015-09-23 20:22:33 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-09-24 06:33:46 +0000 |
commit | bd275378d35b3535bc8b8321780b00e486c36d96 (patch) | |
tree | 4022f57caccd5cea2da74796b6b01d0756d0fd81 /src/time | |
parent | 4260dfe1ecc43d92d1e6d30daa0f22bd746d1740 (diff) | |
download | musl-bd275378d35b3535bc8b8321780b00e486c36d96.tar.gz |
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).
Diffstat (limited to 'src/time')
-rw-r--r-- | src/time/__map_file.c | 5 |
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; } |