1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-16 15:11:52 +00:00

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 Wemm 2006-03-25 01:14:20 +00:00
parent 4b8b545e4b
commit 045b6fdaf6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=157109

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)