From 342a1a23793cb99921abeabe882adf8652ba715d Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 7 Sep 2016 20:56:20 +0200 Subject: [PATCH] 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: Rich Salz --- Configurations/unix-Makefile.tmpl | 8 ++------ Configure | 9 ++++++++- util/build.info | 2 ++ util/{shlib_wrap.sh => shlib_wrap.sh.in} | 2 ++ 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 util/build.info rename util/{shlib_wrap.sh => shlib_wrap.sh.in} (96%) diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 1392295607..d486d9e2ab 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -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 ################################################### diff --git a/Configure b/Configure index 71700ece22..96b6590723 100755 --- a/Configure +++ b/Configure @@ -300,7 +300,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", @@ -780,6 +780,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/); diff --git a/util/build.info b/util/build.info new file mode 100644 index 0000000000..616fbd7967 --- /dev/null +++ b/util/build.info @@ -0,0 +1,2 @@ +SCRIPTS_NO_INST=shlib_wrap.sh +SOURCE[shlib_wrap.sh]=shlib_wrap.sh.in diff --git a/util/shlib_wrap.sh b/util/shlib_wrap.sh.in similarity index 96% rename from util/shlib_wrap.sh rename to util/shlib_wrap.sh.in index ce463f17e8..eff11417a5 100755 --- a/util/shlib_wrap.sh +++ b/util/shlib_wrap.sh.in @@ -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 -- 2.25.1