Make gcore(1) 64 bit safe. It was trying to parse the /proc/*/map file
using sscanf and truncating the start/end entries by writing them with a 32 bit int descriptor (%x). The upper bytes of the 64 bit vm_offset_t variables (for little endian machines) were uninitialized. For big endian machines, things would have been worse because it was storing the 32 bit value in the upper half of the 64 bit variable. I've changed it to use %lx and long types. That should work on all our platforms.
This commit is contained in:
parent
2c8d49d5d1
commit
bf1d6ea4cd
@ -495,15 +495,15 @@ readmap(pid_t pid)
|
||||
linkp = ↦
|
||||
while (pos < mapsize) {
|
||||
vm_map_entry_t ent;
|
||||
vm_offset_t start;
|
||||
vm_offset_t end;
|
||||
u_long start;
|
||||
u_long end;
|
||||
char prot[4];
|
||||
char type[16];
|
||||
int n;
|
||||
int len;
|
||||
|
||||
len = 0;
|
||||
n = sscanf(mapbuf + pos, "%x %x %*d %*d %*x %3[-rwx]"
|
||||
n = sscanf(mapbuf + pos, "%lx %lx %*d %*d %*x %3[-rwx]"
|
||||
" %*d %*d %*x %*s %*s %16s %*s%*[\n]%n",
|
||||
&start, &end, prot, type, &len);
|
||||
if (n != 4 || len == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user