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:
parent
f40ea796ba
commit
3ae8690d8e
46
mem.c
46
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user