diff --git a/src/sys/mm/vmm.c b/src/sys/mm/vmm.c index c84a1955..4369cb99 100644 --- a/src/sys/mm/vmm.c +++ b/src/sys/mm/vmm.c @@ -580,6 +580,8 @@ bool vmm_dealwithrequest(void* addr, long error, bool user){ status = true; + memset(addr, 0, PAGE_SIZE); + done: spinlock_release(lock); diff --git a/src/sys/syscalls/mmap.c b/src/sys/syscalls/mmap.c index d1ab8932..ff653146 100644 --- a/src/sys/syscalls/mmap.c +++ b/src/sys/syscalls/mmap.c @@ -84,14 +84,14 @@ syscallret syscall_mmap(void* hint, size_t len, int prot, int flags, int fd, off if(ret == NULL && (flags & MAP_FIXED) == 0) ret = vmm_allocfrom(USER_ALLOC_START, mmuflags, plen); - if(!ret){ + if(!ret) retv.errno = ENOMEM; - if(flags & MAP_ANON) - memset(ret, 0, plen); - } - else + else{ retv.ret = ret; - + if(hint && (flags & MAP_ANON)) + memset(ret, 0, plen*PAGE_SIZE); + } + return retv; }