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:
peter 2006-03-25 01:14:20 +00:00
parent 2c8d49d5d1
commit bf1d6ea4cd

View File

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