From: Dmitry V. Levin Date: Fri, 1 Apr 2016 15:31:23 +0000 (+0000) Subject: Consistently handle unsigned arguments of mmap* and remap_file_pages X-Git-Tag: v4.12~465 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3ae8690d8eb597fe05dc0a2e746b2e6a83926479;p=strace Consistently handle unsigned arguments of mmap* and remap_file_pages 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. --- diff --git a/mem.c b/mem.c index 28b49c97..53793e6d 100644 --- 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;