[dm-devel] [PATCH 6/7] multipath-tools: make sure plugin DSOs use symbol versions
Benjamin Marzinski
bmarzins at redhat.com
Fri Dec 18 18:36:33 UTC 2020
On Thu, Dec 17, 2020 at 12:00:17PM +0100, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
>
> By adding -Wl,-z,defs, we'll get warnings about unresolved symbols
> at the linking stage. This way we make sure our plugins (checkers etc.)
> will use versioned symbols from libmultipath, and incompatible plugins
> can't be loaded any more. Doing this requires explicitly linking
> the plugins with all libraries they use, in particular libmultipath.
>
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
> Makefile | 1 +
> Makefile.inc | 2 +-
> libmpathpersist/Makefile | 8 ++++----
> libmultipath/checkers/Makefile | 7 +++----
> libmultipath/foreign/Makefile | 4 +++-
> libmultipath/prioritizers/Makefile | 7 +++----
> 6 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index f127ff9..bddb2bf 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -31,6 +31,7 @@ $(BUILDDIRS):
>
> libmultipath libdmmp: libmpathcmd
> libmpathpersist libmpathvalid multipath multipathd: libmultipath
> +libmultipath/prioritizers libmultipath/checkers libmultipath/foreign: libmultipath
> mpathpersist multipathd: libmpathpersist
>
> libmultipath/checkers.install \
> diff --git a/Makefile.inc b/Makefile.inc
> index 13587a9..0542930 100644
> --- a/Makefile.inc
> +++ b/Makefile.inc
> @@ -105,7 +105,7 @@ CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
> BIN_CFLAGS = -fPIE -DPIE
> LIB_CFLAGS = -fPIC
> SHARED_FLAGS = -shared
> -LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now
> +LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs
> BIN_LDFLAGS = -pie
>
> # Check whether a function with name $1 has been declared in header file $2.
> diff --git a/libmpathpersist/Makefile b/libmpathpersist/Makefile
> index 456ce4c..57103e5 100644
> --- a/libmpathpersist/Makefile
> +++ b/libmpathpersist/Makefile
> @@ -6,17 +6,17 @@ LIBS = $(DEVLIB).$(SONAME)
> VERSION_SCRIPT := libmpathpersist.version
>
> CFLAGS += $(LIB_CFLAGS) -I$(multipathdir) -I$(mpathpersistdir) -I$(mpathcmddir)
> +LDFLAGS += -L$(multipathdir) -L$(mpathcmddir)
>
> -LIBDEPS += -lpthread -ldevmapper -ldl -L$(multipathdir) -lmultipath \
> - -L$(mpathcmddir) -lmpathcmd
> +LIBDEPS += -lmultipath -lmpathcmd -ldevmapper -lpthread -ldl
>
> OBJS = mpath_persist.o mpath_updatepr.o mpath_pr_ioctl.o
>
> all: $(DEVLIB) man
>
> $(LIBS): $(OBJS) $(VERSION_SCRIPT)
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) $(LIBDEPS) -Wl,-soname=$@ \
> - -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS)
> + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -Wl,-soname=$@ \
> + -Wl,--version-script=$(VERSION_SCRIPT) -o $@ $(OBJS) $(LIBDEPS)
>
> $(DEVLIB): $(LIBS)
> $(LN) $(LIBS) $@
> diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile
> index 01c0451..8e0ed5e 100644
> --- a/libmultipath/checkers/Makefile
> +++ b/libmultipath/checkers/Makefile
> @@ -4,6 +4,8 @@
> include ../../Makefile.inc
>
> CFLAGS += $(LIB_CFLAGS) -I..
> +LDFLAGS += -L.. -lmultipath
> +LIBDEPS = -lmultipath -laio -lpthread -lrt
>
> # If you add or remove a checker also update multipath/multipath.conf.5
> LIBS= \
> @@ -17,11 +19,8 @@ LIBS= \
>
> all: $(LIBS)
>
> -libcheckdirectio.so: directio.o
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -laio
> -
> libcheck%.so: %.o
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^
> + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS)
>
> install:
> $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir)
> diff --git a/libmultipath/foreign/Makefile b/libmultipath/foreign/Makefile
> index fae58a0..f447a1c 100644
> --- a/libmultipath/foreign/Makefile
> +++ b/libmultipath/foreign/Makefile
> @@ -5,13 +5,15 @@ TOPDIR=../..
> include ../../Makefile.inc
>
> CFLAGS += $(LIB_CFLAGS) -I.. -I$(nvmedir)
> +LDFLAGS += -L..
> +LIBDEPS = -lmultipath -ludev -lpthread -lrt
>
> LIBS = libforeign-nvme.so
>
> all: $(LIBS)
>
> libforeign-%.so: %.o
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^
> + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS)
>
> install:
> $(INSTALL_PROGRAM) -m 755 $(LIBS) $(DESTDIR)$(libdir)
> diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile
> index fc6e0e0..8d34ae3 100644
> --- a/libmultipath/prioritizers/Makefile
> +++ b/libmultipath/prioritizers/Makefile
> @@ -4,6 +4,8 @@
> include ../../Makefile.inc
>
> CFLAGS += $(LIB_CFLAGS) -I..
> +LDFLAGS += -L..
> +LIBDEPS = -lmultipath -lm -lpthread -lrt
>
> # If you add or remove a prioritizer also update multipath/multipath.conf.5
> LIBS = \
> @@ -28,11 +30,8 @@ endif
>
> all: $(LIBS)
>
> -libpriopath_latency.so: path_latency.o
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -lm
> -
> libprio%.so: %.o
> - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^
> + $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ $(LIBDEPS)
>
> install: $(LIBS)
> $(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(libdir)
> --
> 2.29.0
More information about the dm-devel
mailing list