[sudo-users] [BUG] Another system (solaris 10 sparc) requires --disable-pie flag
Christian Jullien
eligis at orange.fr
Thu May 23 13:47:30 MDT 2013
Maybe here is the culprit?
Given:
#include <stdlib.h>
#include <stdio.h>
int
main()
{
return printf("malloc %p\n", malloc(100));
}
I get:
[jullien at pastre]src$ gcc -o foo -pie foo.c && ./foo
malloc 0
[jullien at pastre]src$ gcc -o foo foo.c && ./foo
malloc 20918
Now the question, why do you link the binaries with -pie ? as in
/bin/bash ../libtool --tag=disable-static --mode=link gcc -m64 -mptr64
-mcpu=v9 -o sudo conversation.o env_hooks.o exec.o exec_common.o exec_pty.o
get_pty.o hooks.o net_ifs.o load_plugins.o parse_args.o signal.o sudo.o
sudo_edit.o tgetpass.o ttyname.o utmp.o solaris.o locale_stub.o
-Wl,-z,relro -pie -Wc,-fstack-protector-all -lsocket -lnsl
../common/libcommon.la ../compat/libreplace.la
To me, -pie is only needed for .so, right?
When you link with or without -pie, binary size is about the same (378240
V.S. 377808 if -pie) and use exactly the same .so dependencies
[jullien at pastre]src$ ldd sudo # either with or
without -pie
libsocket.so.1 => /lib/libsocket.so.1
libnsl.so.1 => /lib/libnsl.so.1
libssp.so.0 => /usr/local/lib/libssp.so.0
libc.so.1 => /lib/libc.so.1
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
libscf.so.1 => /lib/libscf.so.1
libdoor.so.1 => /lib/libdoor.so.1
libuutil.so.1 => /lib/libuutil.so.1
libgen.so.1 => /lib/libgen.so.1
libm.so.2 => /lib/libm.so.2
/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
/platform/SUNW,Ultra-5_10/lib/libmd_psr.so.1
When I remove manually -pie only for sudo link it works.
My suggestion is to compile all files with -pie (when configured with -pie),
link with -pie the .so you want to create and -remove -pie for binary tools
(sudo, visudo ...)
WDYT ?
C.
-----Original Message-----
From: Todd C. Miller [mailto:Todd.Miller at courtesan.com]
Sent: jeudi 23 mai 2013 15:41
To: Christian Jullien
Cc: sudo-users at sudo.ws
Subject: Re: [sudo-users] [BUG] Another system (solaris 10 sparc) requires
--disable-pie flag
On Wed, 15 May 2013 21:23:09 +0200, "Christian Jullien" wrote:
> In case it helps, here is the result of truss sudo when I don't
> compile with
> --disable-pie:
That trace looks quite different from what I see. I don't have any
lwp_create in my trace, but I an running an older Solaris 10 patch level.
The placement of the bad brk() call is suspiciously close to where
methods_unicode.so.3 is loaded.
Can you try building with --disable-nls but with PIE enabled and see if that
changes anything?
- todd
More information about the sudo-users
mailing list