Syscalls: warn when the length argument to mmap is excessive.
authorGabe Black <gblack@eecs.umich.edu>
Sat, 19 May 2012 11:13:47 +0000 (04:13 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sat, 19 May 2012 11:13:47 +0000 (04:13 -0700)
If the length argument to mmap is larger than the arbitrary but reasonable
limit of 4GB, there's a good chance that the value is nonsense and not
intentional. Rather than attempting to satisfy the mmap anyway, this change
makes gem5 warn to make it more apparent what's going wrong.

src/sim/syscall_emul.hh

index 504add35f85b0b0aeb6e6a02f74a22853c3f4e4d..87899abca34bda7168f5f134fe120689f5ba2bd5 100644 (file)
@@ -1004,6 +1004,9 @@ mmapFunc(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
     int tgt_fd = p->getSyscallArg(tc, index);
     // int offset = p->getSyscallArg(tc, index);
 
+    if (length > 0x100000000ULL)
+        warn("mmap length argument %#x is unreasonably large.\n", length);
+
     if (!(flags & OS::TGT_MAP_ANONYMOUS)) {
         Process::FdMap *fd_map = p->sim_fd_obj(tgt_fd);
         if (!fd_map || fd_map->fd < 0) {