Thursday, May 25, 2017

Valgrind W^X Violation

Hello Misc,

I have been trying to get Valgrind to run on OpenBSD 6.1-release, with
all errata applied via syspatch(8), and I am having no luck. When
executing Valgrind against any binary (or no binary at all), it claims to
run out of memory and dumps a W^X violation error into the dmesg
output.

There have been several other mailing list posts about this issue over
the last few months, but nothing seems to have come of it:

http://openbsd-archive.7691.n7.nabble.com/valgrind-error-W-X-violation-td299828.html
http://openbsd-archive.7691.n7.nabble.com/W-X-issues-running-valgrind-td305977.html

I have tried reaching out to the package maintainer listed in pkg_info,
but haven't heard anything back yet. Is there anything that I can do to
assist in debugging and fixing this issue? If it would be of any use to
anyone, I have ktrace dumps, but the output was a bit verbose for an
already long email. I can forward along if it would be helpful.

It appears that the next step may be to update my system to follow current,
grab a copy of the ports tree, and attempt to build the package with
-Wl,-z,wxneeded. Am I on the right track here?

Relevant command output follows:

===

$ valgrind -q ls
--73181:0:aspacem <<< SHOW_SEGMENTS: out_of_memory (20 segments, 0 segnames)
--73181:0:aspacem 0: RSVN 0000000000-0003ffffff 64m ----- SmFixed
--73181:0:aspacem 1: 0004000000-0037ffffff 832m
--73181:0:aspacem 2: ANON 0038000000-003835ffff 3538944 r-x--
--73181:0:aspacem 3: 0038360000-003845efff 1044480
--73181:0:aspacem 4: FILE 003845f000-00384f4fff 614400 r---- d=0x000 i=0 o=3534848 (-1)
--73181:0:aspacem 5: 00384f5000-00385f4fff 1048576
--73181:0:aspacem 6: FILE 00385f5000-00385fdfff 36864 rw--- d=0x000 i=0 o=4149248 (-1)
--73181:0:aspacem 7: ANON 00385fe000-00385fefff 4096 rw---
--73181:0:aspacem 8: 00385ff000-00386fdfff 1044480
--73181:0:aspacem 9: FILE 00386fe000-00386fefff 4096 rw--- d=0x000 i=0 o=4186112 (-1)
--73181:0:aspacem 10: ANON 00386ff000-003a150fff 26m rw---
--73181:0:aspacem 11: 003a151000-02e6faffff 10958m
--73181:0:aspacem 12: ANON 02e6fb0000-02e6fb0fff 4096 r-x--
--73181:0:aspacem 13: 02e6fb1000-0801ffffff 20912m
--73181:0:aspacem 14: RSVN 0802000000-0802000fff 4096 ----- SmFixed
--73181:0:aspacem 15: 0802001000-0fffffffff 32735m
--73181:0:aspacem 16: RSVN 1000000000-7f7ffded9fff 130495g ----- SmFixed
--73181:0:aspacem 17: ANON 7f7ffdeda000-7f7fffbd9fff 29m -----
--73181:0:aspacem 18: ANON 7f7fffbda000-7f7ffffd9fff 4194304 rw---
--73181:0:aspacem 19: RSVN 7f7ffffda000-ffffffffffffffff 16383e ----- SmFixed
--73181:0:aspacem >>>
--73181-- core : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 8 rzB
--73181-- dinfo : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 8 rzB
--73181-- (null) : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 0 rzB
--73181-- demangle: 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 8 rzB
--73181-- ttaux : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 8 rzB
--73181-- translate: fast SP updates identified: 0 ( --%)
--73181-- translate: generic_known SP updates identified: 0 ( --%)
--73181-- translate: generic_unknown SP updates identified: 0 ( --%)
--73181-- tt/tc: 0 tt lookups requiring 0 probes
--73181-- tt/tc: 0 fast-cache updates, 0 flushes
--73181-- transtab: new 0 (0 -> 0; ratio 0:10) [0 scs]
--73181-- transtab: dumped 0 (0 -> ??)
--73181-- transtab: discarded 0 (0 -> ??)
--73181-- scheduler: 0 event checks.
--73181-- scheduler: 0 indir transfers, 0 misses (1 in 0)
--73181-- scheduler: 0/0 major/minor sched events.
--73181-- sanity: 0 cheap, 0 expensive checks.
==73181==
==73181== Valgrind's memory management: out of memory:
==73181== newSuperblock's request for 4194304 bytes failed.
==73181== 65748992 bytes have already been allocated.
==73181== Valgrind cannot continue. Sorry.
==73181==
==73181== There are several possible reasons for this.
==73181== - You have some kind of memory limit in place. Look at the
==73181== output of 'ulimit -a'. Is there a limit on the size of
==73181== virtual memory or address space?
==73181== - You have run out of swap space.
==73181== - Valgrind has a bug. If you think this is the case or you are
==73181== not sure, please let us know and we'll try to fix it.
==73181== Please note that programs can take substantially more memory than
==73181== normal when running under Valgrind tools, eg. up to twice or
==73181== more, depending on the tool. On a 64-bit machine, Valgrind
==73181== should be able to make use of up 32GB memory. On a 32-bit
==73181== machine, Valgrind should be able to use all the memory available
==73181== to a single process, up to 4GB if that's how you have your
==73181== kernel configured. Most 32-bit Linux setups allow a maximum of
==73181== 3GB per process.
==73181==
==73181== Whatever the reason, Valgrind cannot continue. Sorry.

$ dmesg
OpenBSD 6.1 (GENERIC) #8: Mon May 22 20:27:59 CEST 2017
robert@syspatch-61-amd64.openbsd.org<mailto:robert@syspatch-61-amd64.openbsd.org>:/usr/src/sys/arch/amd64/compile/GENERIC
real mem = 2130640896 (2031MB)
avail mem = 2061524992 (1966MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.5 @ 0xe1000 (10 entries)
bios0: vendor innotek GmbH version "VirtualBox" date 12/01/2006
bios0: innotek GmbH VirtualBox
acpi0 at bios0: rev 2
acpi0: sleep states S0 S5
acpi0: tables DSDT FACP APIC SSDT
acpi0: wakeup devices
acpitimer0 at acpi0: 3579545 Hz, 32 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz, 2491.44 MHz
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SSE3,PCLMUL,MWAIT,SSSE3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,RDRAND,NXE,RDTSCP,LONG,LAHF,ABM,ITSC
cpu0: 256KB 64b/line 8-way L2 cache
cpu0: TSC frequency 2491436930 Hz
cpu0: smt 0, core 0, package 0
mtrr: CPU supports MTRRs but not enabled by BIOS
cpu0: apic clock running at 1000MHz
cpu0: mwait min=64, max=64
ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 20, 24 pins
acpiprt0 at acpi0: bus 0 (PCI0)
acpicpu0 at acpi0: C1(@1 halt!)
"PNP0303" at acpi0 not configured
"PNP0F03" at acpi0 not configured
acpibat0 at acpi0: BAT0 model "1" serial 0 type VBOX oem "innotek"
acpiac0 at acpi0: AC unit online
acpivideo0 at acpi0: GFX0
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel 82441FX" rev 0x02
pcib0 at pci0 dev 1 function 0 "Intel 82371SB ISA" rev 0x00
pciide0 at pci0 dev 1 function 1 "Intel 82371AB IDE" rev 0x01: DMA, channel 0 configured to compatibility, channel 1 configured to compatibility
wd0 at pciide0 channel 0 drive 0: <VBOX HARDDISK>
wd0: 128-sector PIO, LBA, 20480MB, 41943040 sectors
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 2
atapiscsi0 at pciide0 channel 1 drive 0
scsibus1 at atapiscsi0: 2 targets
cd0 at scsibus1 targ 0 lun 0: <VBOX, CD-ROM, 1.0> ATAPI 5/cdrom removable
cd0(pciide0:1:0): using PIO mode 4, Ultra-DMA mode 2
vga1 at pci0 dev 2 function 0 "InnoTek VirtualBox Graphics Adapter" rev 0x00
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
em0 at pci0 dev 3 function 0 "Intel 82540EM" rev 0x02: apic 1 int 19, address 08:00:27:aa:0f:89
"InnoTek VirtualBox Guest Service" rev 0x00 at pci0 dev 4 function 0 not configured
auich0 at pci0 dev 5 function 0 "Intel 82801AA AC97" rev 0x01: apic 1 int 21, ICH
ac97: codec id 0x83847600 (SigmaTel STAC9700)
audio0 at auich0
ohci0 at pci0 dev 6 function 0 "Apple Intrepid USB" rev 0x00: apic 1 int 22, version 1.0
piixpm0 at pci0 dev 7 function 0 "Intel 82371AB Power" rev 0x08: apic 1 int 23
iic0 at piixpm0
isa0 at pcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
usb0 at ohci0: USB revision 1.0
uhub0 at usb0 configuration 1 interface 0 "Apple OHCI root hub" rev 1.00/1.00 addr 1
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
root on wd0a (44c07e72d464603b.a) swap on wd0b dump on wd0b
memcheck-amd64-o(60871): mmap W^X violation
memcheck-amd64-o(97933): mmap W^X violation
memcheck-amd64-o(17438): mmap W^X violation
memcheck-amd64-o(45468): mmap W^X violation
memcheck-amd64-o(6173): mmap W^X violation
memcheck-amd64-o(73181): mmap W^X violation

$ mount
/dev/wd0a on / type ffs (local)
/dev/wd0k on /home type ffs (local, nodev, nosuid)
/dev/wd0d on /tmp type ffs (local, nodev, nosuid)
/dev/wd0f on /usr type ffs (local, nodev)
/dev/wd0g on /usr/X11R6 type ffs (local, nodev)
/dev/wd0h on /usr/local type ffs (local, nodev, wxallowed)
/dev/wd0j on /usr/obj type ffs (local, nodev, nosuid)
/dev/wd0i on /usr/src type ffs (local, nodev, nosuid)
/dev/wd0e on /var type ffs (local, nodev, nosuid)

$ which valgrind
/usr/local/bin/valgrind

$ objdump -p /usr/local/bin/valgrind

/usr/local/bin/valgrind: file format elf64-x86-64

Program Header:
PHDR off 0x0000000000000040 vaddr 0x0000000000000040 paddr 0x0000000000000040 align 2**3
filesz 0x0000000000000230 memsz 0x0000000000000230 flags r-x
INTERP off 0x0000000000001f0e vaddr 0x0000000000101f0e paddr 0x0000000000101f0e align 2**0
filesz 0x0000000000000013 memsz 0x0000000000000013 flags r--
LOAD off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**20
filesz 0x0000000000001f0e memsz 0x0000000000001f0e flags r-x
LOAD off 0x0000000000001f0e vaddr 0x0000000000101f0e paddr 0x0000000000101f0e align 2**20
filesz 0x00000000000011aa memsz 0x00000000000011aa flags r--
LOAD off 0x0000000000003d70 vaddr 0x0000000000203d70 paddr 0x0000000000203d70 align 2**20
filesz 0x00000000000002a4 memsz 0x0000000000001318 flags rw-
DYNAMIC off 0x0000000000003d80 vaddr 0x0000000000203d80 paddr 0x0000000000203d80 align 2**3
filesz 0x0000000000000140 memsz 0x0000000000000140 flags rw-
NOTE off 0x0000000000001f24 vaddr 0x0000000000101f24 paddr 0x0000000000101f24 align 2**2
filesz 0x0000000000000018 memsz 0x0000000000000018 flags r--
EH_FRAME off 0x0000000000002d10 vaddr 0x0000000000102d10 paddr 0x0000000000102d10 align 2**2
filesz 0x00000000000000ac memsz 0x00000000000000ac flags r--
OPENBSD_RANDOMIZE off 0x0000000000003d70 vaddr 0x0000000000203d70 paddr 0x0000000000203d70 align 2**3
filesz 0x0000000000000008 memsz 0x0000000000000008 flags rw-
RELRO off 0x0000000000003d70 vaddr 0x0000000000203d70 paddr 0x0000000000203d70 align 2**3
filesz 0x0000000000000290 memsz 0x0000000000000290 flags r--

Dynamic Section:
NEEDED libc.so.89.3
HASH 0x101f40
STRTAB 0x102558
SYMTAB 0x1020a8
STRSZ 0x11c
SYMENT 0x18
DEBUG 0x0
PLTGOT 0x203ee0
PLTRELSZ 0x2b8
PLTREL 0x7
JMPREL 0x1026f0
RELA 0x102678
RELASZ 0x78
RELAENT 0x18
RELACOUNT 0x2

===

Thanks in advance for any advice that you might be able to offer.

Peter

No comments:

Post a Comment