From: Martin Wilck <mwilck@xxxxxxxx> 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. Signed-off-by: Martin Wilck <mwilck@xxxxxxxx> --- 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 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel