Commit c3cfc996 authored by Richard Levitte's avatar Richard Levitte Committed by Richard Levitte
Browse files

Allow asan, msan and ubsan to be configured with shared libraries



The background story is that util/shlib_wrap.sh was setting LD_PRELOAD
or similar platform dependent variables, just in case the shared
libraries were built with -rpath.  Unfortunately, this doesn't work
too well with asan, msan or ubsan.

So, the solution is to forbid the combination of shared libraries,
-rpath and any of the sanity analyzers we can configure.

This changes util/shlib_wrap.sh so it only contains the code that sets
LD_PRELOAD when -rpath has been used when configuring.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
(cherry picked from commit 342a1a23)
parent 92ed7fa5
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -775,18 +775,14 @@ dist:

# Helper targets #####################################################

link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/util/shlib_wrap.sh
link-utils: $(BLDDIR)/util/opensslwrap.sh

$(BLDDIR)/util/opensslwrap.sh: configdata.pm
	@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
	    mkdir -p "$(BLDDIR)/util"; \
	    ln -sf "../$(SRCDIR)/util/opensslwrap.sh" "$(BLDDIR)/util"; \
	fi
$(BLDDIR)/util/shlib_wrap.sh: configdata.pm
	@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
	    mkdir -p "$(BLDDIR)/util"; \
	    ln -sf "../$(SRCDIR)/util/shlib_wrap.sh" "$(BLDDIR)/util"; \
	fi

FORCE:

# Building targets ###################################################
+8 −1
Original line number Diff line number Diff line
@@ -284,7 +284,7 @@ my $default_ranlib;
$config{fips}=0;

# Top level directories to build
$config{dirs} = [ "crypto", "ssl", "engines", "apps", "test", "tools", "fuzz" ];
$config{dirs} = [ "crypto", "ssl", "engines", "apps", "test", "util", "tools", "fuzz" ];
# crypto/ subdirectories to build
$config{sdirs} = [
    "objects",
@@ -763,6 +763,13 @@ foreach (@argvcopy)
		}
	}

if ($libs =~ /(^|\s)-Wl,-rpath,/
    && !$disabled{shared}
    && !($disabled{asan} && $disabled{msan} && $disabled{ubsan})) {
    die "***** Cannot simultaneously use -rpath, shared libraries, and\n",
	"***** any of asan, msan or ubsan\n";
}

if ($config{fips})
	{
	delete $disabled{"shared"} if ($disabled{"shared"} =~ /^default/);

util/build.info

0 → 100644
+2 −0
Original line number Diff line number Diff line
SCRIPTS_NO_INST=shlib_wrap.sh
SOURCE[shlib_wrap.sh]=shlib_wrap.sh.in
+2 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ SunOS|IRIX*)
	;;
esac

{- output_off() if $config{ex_libs} !~ /(^|\s)-Wl,-rpath,/; ""; -}
if [ -f "$LIBCRYPTOSO" -a -z "$preload_var" ]; then
	# Following three lines are major excuse for isolating them into
	# this wrapper script. Original reason for setting LD_PRELOAD
@@ -96,6 +97,7 @@ if [ -f "$LIBCRYPTOSO" -a -z "$preload_var" ]; then
	DYLD_INSERT_LIBRARIES="$LIBCRYPTOSO:$LIBSSLSO"	# MacOS X
	export LD_PRELOAD _RLD_LIST DYLD_INSERT_LIBRARIES
fi
{- output_on() if $config{ex_libs} !~ /(^|\s)-Wl,-rpath,/; ""; -}

cmd="$1"; [ -x "$cmd" ] || cmd="$cmd${EXE_EXT}"
shift