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.
This commit is contained in:
Дмитрий Левин 2016-04-01 15:31:23 +00:00
parent f40ea796ba
commit 3ae8690d8e

46
mem.c
View File

@ -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;