|
From: <sv...@va...> - 2005-10-04 13:02:49
|
Author: tom
Date: 2005-10-04 14:02:31 +0100 (Tue, 04 Oct 2005)
New Revision: 4853
Log:
Check permissions when sanity checking the segment list against
the kernel's memory map.
Modified:
trunk/coregrind/m_aspacemgr/aspacemgr.c
Modified: trunk/coregrind/m_aspacemgr/aspacemgr.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-10-04 12:04:06 UTC (rev =
4852)
+++ trunk/coregrind/m_aspacemgr/aspacemgr.c 2005-10-04 13:02:31 UTC (rev =
4853)
@@ -884,6 +884,7 @@
for (i =3D iLo; i <=3D iHi; i++) {
=20
Bool same, cmp_offsets, cmp_devino;
+ UInt seg_prot;
=20
/* compare the kernel's offering against ours. */
same =3D nsegments[i].kind =3D=3D SkAnonC
@@ -891,12 +892,18 @@
|| nsegments[i].kind =3D=3D SkFileC
|| nsegments[i].kind =3D=3D SkFileV;
=20
+ seg_prot =3D 0;
+ if (nsegments[i].hasR) seg_prot |=3D VKI_PROT_READ;
+ if (nsegments[i].hasW) seg_prot |=3D VKI_PROT_WRITE;
+ if (nsegments[i].hasX) seg_prot |=3D VKI_PROT_EXEC;
+
cmp_offsets
=3D nsegments[i].kind =3D=3D SkFileC || nsegments[i].kind =3D=3D=
SkFileV;
cmp_devino
=3D nsegments[i].dev !=3D 0 || nsegments[i].ino !=3D 0;
=20
same =3D same
+ && seg_prot =3D=3D prot
&& (cmp_devino
? (nsegments[i].dev =3D=3D dev && nsegments[i].ino =3D=
=3D ino)
: True)
@@ -920,9 +927,9 @@
VG_(debugLog)(0,"aspacem",
"sync_check_mapping_callback: segment mismatch: kerne=
l's seg:\n");
VG_(debugLog)(0,"aspacem",=20
- "start=3D0x%llx end=3D0x%llx dev=3D%u ino=3D%u offset=
=3D%lld\n",
+ "start=3D0x%llx end=3D0x%llx prot=3D%u dev=3D%u ino=3D=
%u offset=3D%lld\n",
(ULong)addr, ((ULong)addr) + ((ULong)len) - 1,
- dev, ino, offset );
+ prot, dev, ino, offset );
return;
}
=20
|