GNU_RELRO support broken on mips64e[bl] (Was: "security/sudo" gets SIGBUS on Lemote Yeeloong (LOONGSON))
Rin Okuyama <[email protected]> Sun, 11 Sep 2016 11:42:47 +0900
| Newsgroups | gmane.os.netbsd.ports.evbmips,gmane.os.netbsd.ports.mips.devel |
|---|---|
| Message-ID | <[email protected]> |
On 9 Sep 2016 16:58 John D. Baker wrote: > A freshly-built "security/sudo" from pkgsrc-HEAD (20160909) dies with > "Bus error" prior to any authentication attempt. Rebuilding with > debugging enabled and using 'su' to become root and run it under 'gdb' > reveals: I observed the same error on ERLITE (evbmips64-eb) with kernel and userland from current (20160908). However, I tried this again with yesterday's current, then "Bus error" turned into "Memory fault": $ sudo trap: pid 28935(sudo): sig 11: cause=0x4 epc=0x7876fe60 va=0x78785321 registers: [ 0]=00000000 [ 1]=00000000 [ 2]=78780000 [ 3]=00000001 [ 4]=00000003 [ 5]=7fff6cc0 [ 6]=00000000 [ 7]=00000000 [ 8]=00000000 [ 9]=00000000 [10]=00099960 [11]=0001eb79 [12]=00000001 [13]=00000062 [14]=787cd000 [15]=787fc4c0 [16]=787629a4 [17]=787d0000 [18]=787f4794 [19]=00000001 [20]=787ca480 [21]=ffffffffff7fffff [22]=00800000 [23]=7fff6cc0 [24]=00162000 [25]=7876fe30 [26]=00000000 [27]=00000000 [28]=7878d100 [29]=7fff6c10 [30]=00000000 [31]=787629c8 pid 28935 (sudo), uid 0: exited on signal 11 (core not dumped, err = 1 Memory fault $ Diffs between two kernels are followings: - $NetBSD: trap.c,v 1.241 2016/07/11 18:54:32 skrll Exp $ + $NetBSD: trap.c,v 1.243 2016/09/10 13:42:11 skrll Exp $ - $NetBSD: netbsd32_netbsd.c,v 1.200 2016/05/13 16:54:36 christos Exp $ + $NetBSD: netbsd32_netbsd.c,v 1.202 2016/09/10 08:21:26 skrll Exp $ - $NetBSD: netbsd32_socket.c,v 1.42 2015/07/22 14:25:39 maxv Exp $ + $NetBSD: netbsd32_socket.c,v 1.43 2016/09/08 18:54:03 martin Exp $ - $NetBSD: netbsd32_sysent.c,v 1.121 2015/12/03 10:39:50 pgoyette Exp $ + $NetBSD: netbsd32_sysent.c,v 1.122 2016/09/10 08:19:58 skrll Exp $ I found that this failure occurs with binaries compiled with -Wl,-z,relro: $ cc hello.c && ./a.out Hello, World! $ cc -Wl,-z,relro hello.c && ./a.out pid 2526(a.out): sig 11: cause=0x80000004 (snip) pid 2526 (a.out), uid 501: exited on signal 11 (core dumped) Memory fault $ Memory fault does not occur with sudo compiled without that option. Something is wrong withGNU_RELRO support. Actually, this failure can be avoided when ld.elf_so is compiled without -DGNU_RELRO option. Thanks, Rin