]> granicus.if.org Git - strace/commitdiff
Consistently handle unsigned arguments of mmap* and remap_file_pages
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 1 Apr 2016 15:31:23 +0000 (15:31 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 1 Apr 2016 15:31:23 +0000 (15:31 +0000)
Explicitly declare first 4 arguments of mmap* and all remap_file_pages
arguments as unsigned to avoid potential sign extension issues.

* mem.c (print_mmap, SYS_FUNC(remap_file_pages)): Assign syscall
arguments to local variables of appropriate types.

mem.c

diff --git a/mem.c b/mem.c
index 28b49c9758dd29c2c705c565a80a0a59e01e0856..53793e6d1e3684fa3ecbebd740e8210652a0db03 100644 (file)
--- a/mem.c
+++ b/mem.c
@@ -57,24 +57,24 @@ SYS_FUNC(brk)
 static void
 print_mmap(struct tcb *tcp, long *u_arg, unsigned long long offset)
 {
-       /* addr */
-       printaddr(u_arg[0]);
-       /* len */
-       tprintf(", %lu, ", u_arg[1]);
-       /* prot */
-       printflags(mmap_prot, u_arg[2], "PROT_???");
+       const unsigned long addr = u_arg[0];
+       const unsigned long len = u_arg[1];
+       const unsigned long prot = u_arg[2];
+       const unsigned long flags = u_arg[3];
+       const int fd = u_arg[4];
+
+       printaddr(addr);
+       tprintf(", %lu, ", len);
+       printflags(mmap_prot, prot, "PROT_???");
        tprints(", ");
-       /* flags */
 #ifdef MAP_TYPE
-       printxval(mmap_flags, u_arg[3] & MAP_TYPE, "MAP_???");
-       addflags(mmap_flags, u_arg[3] & ~MAP_TYPE);
+       printxval(mmap_flags, flags & MAP_TYPE, "MAP_???");
+       addflags(mmap_flags, flags & ~MAP_TYPE);
 #else
-       printflags(mmap_flags, u_arg[3], "MAP_???");
+       printflags(mmap_flags, flags, "MAP_???");
 #endif
        tprints(", ");
-       /* fd */
-       printfd(tcp, u_arg[4]);
-       /* offset */
+       printfd(tcp, fd);
        tprintf(", %#llx", offset);
 }
 
@@ -301,15 +301,21 @@ SYS_FUNC(getpagesize)
 
 SYS_FUNC(remap_file_pages)
 {
-       printaddr(tcp->u_arg[0]);
-       tprintf(", %lu, ", tcp->u_arg[1]);
-       printflags(mmap_prot, tcp->u_arg[2], "PROT_???");
-       tprintf(", %lu, ", tcp->u_arg[3]);
+       const unsigned long addr = tcp->u_arg[0];
+       const unsigned long size = tcp->u_arg[1];
+       const unsigned long prot = tcp->u_arg[2];
+       const unsigned long pgoff = tcp->u_arg[3];
+       const unsigned long flags = tcp->u_arg[4];
+
+       printaddr(addr);
+       tprintf(", %lu, ", size);
+       printflags(mmap_prot, prot, "PROT_???");
+       tprintf(", %lu, ", pgoff);
 #ifdef MAP_TYPE
-       printxval(mmap_flags, tcp->u_arg[4] & MAP_TYPE, "MAP_???");
-       addflags(mmap_flags, tcp->u_arg[4] & ~MAP_TYPE);
+       printxval(mmap_flags, flags & MAP_TYPE, "MAP_???");
+       addflags(mmap_flags, flags & ~MAP_TYPE);
 #else
-       printflags(mmap_flags, tcp->u_arg[4], "MAP_???");
+       printflags(mmap_flags, flags, "MAP_???");
 #endif
 
        return RVAL_DECODED;