Source: libselinux
Version: 3.9-4
Severity: important
Justification: build regression for essential package on non-release 
architecture
Tags: ftbfs upstream
X-Debbugs-Cc: [email protected]
User: [email protected]
Usertags: x32
User: [email protected]
Usertags: rebootstrap

Since a while, libselinux fails linking on x32.

| x86_64-linux-gnux32-gcc -Wdate-time -D_FORTIFY_SOURCE=2 -D_LARGEFILE64_SOURCE 
-g -O2 -Werror=implicit-function-declaration 
-ffile-prefix-map=/build/reproducible-path/libselinux-3.9=. -flto=auto 
-ffat-lto-objects -specs=/usr/share/dpkg/pie-compile.specs 
-fstack-protector-strong -Wformat -Werror=format-security -fcf-protection 
-fno-semantic-interposition -Wall -Wextra -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64 -I../include -D_GNU_SOURCE -DNO_ANDROID_BACKEND 
-DUSE_PCRE2 -DPCRE2_CODE_UNIT_WIDTH=8 -DHAVE_STRLCPY -DHAVE_REALLOCARRAY 
-flto=auto -ffat-lto-objects -specs=/usr/share/dpkg/pie-link.specs -Wl,-z,relro 
-Wl,-z,now -shared -o libselinux.so.1 avc.lo avc_internal.lo avc_sidtab.lo 
booleans.lo callbacks.lo canonicalize_context.lo checkAccess.lo 
check_context.lo checkreqprot.lo compute_av.lo compute_create.lo 
compute_member.lo compute_relabel.lo compute_user.lo context.lo deny_unknown.lo 
disable.lo enabled.lo fgetfilecon.lo freecon.lo freeconary.lo fsetfilecon.lo 
get_context_list.lo get_default_type.lo get_initial_context.lo getenforce.lo 
getfilecon.lo getpeercon.lo init.lo is_customizable_type.lo label.lo 
label_db.lo label_file.lo label_media.lo label_support.lo label_x.lo 
lgetfilecon.lo load_policy.lo lsetfilecon.lo mapping.lo matchmediacon.lo 
matchpathcon.lo policyvers.lo procattr.lo query_user_context.lo regex.lo 
reject_unknown.lo selinux_check_securetty_context.lo selinux_config.lo 
selinux_internal.lo selinux_restorecon.lo sestatus.lo setenforce.lo 
setexecfilecon.lo setfilecon.lo setrans_client.lo seusers.lo sha1.lo 
stringrep.lo validatetrans.lo -lpcre2-8   -ldl 
-Wl,-soname,libselinux.so.1,--version-script=libselinux.map,-z,defs,-z,relro
| /usr/bin/ld: /tmp/cclRaeek.ltrans0.ltrans.o: relocation R_X86_64_TPOFF32 
against hidden symbol `prev_current.lto_priv.0' can not be used when making a 
shared object
| /usr/bin/ld: failed to set dynamic section sizes: bad value
| collect2: error: ld returned 1 exit status
| make[3]: *** [Makefile:171: libselinux.so.1] Error 1
| make[3]: Leaving directory '/build/reproducible-path/libselinux-3.9/src'
| make[2]: *** [Makefile:54: all] Error 1
| make[2]: Leaving directory '/build/reproducible-path/libselinux-3.9'
| make[1]: *** [debian/rules:46: build-all] Error 2
| make[1]: Leaving directory '/build/reproducible-path/libselinux-3.9'
| make: *** [debian/rules:37: binary-arch] Error 2

Since LTO is being used, code can be generated at the linking stage.
Unless passing -fPIC, this code is not position-independent as is
required for shared libraries. This happens to work on most
architectures but x32 by chance. The -fPIC flag really needs to passed
to the linker as well. It might also fix sh4 and it seems likely to also
fix m68k.

Patch attached.

Helmut
--- libselinux-3.9.orig/src/Makefile
+++ libselinux-3.9/src/Makefile
@@ -161,14 +161,14 @@
 	$(CC) $(CPPFLAGS) $(CFLAGS) $(SWIG_CFLAGS) $(RUBYINC) -fPIC -DSHARED -c -o $@ $<
 
 $(SWIGRUBYSO): $(SWIGRUBYLOBJ)
-	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -L. -shared -o $@ $^ -lselinux $(RUBYLIBS)
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -L. -fPIC -shared -o $@ $^ -lselinux $(RUBYLIBS)
 
 $(LIBA): $(OBJS)
 	$(AR) rcs $@ $^
 	$(RANLIB) $@
 
 $(LIBSO): $(LOBJS)
-	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -o $@ $^ $(PCRE_LDLIBS) $(FTS_LDLIBS) -ldl -Wl,$(LD_SONAME_FLAGS)
+	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -fPIC -shared -o $@ $^ $(PCRE_LDLIBS) $(FTS_LDLIBS) -ldl -Wl,$(LD_SONAME_FLAGS)
 	ln -sf $@ $(TARGET)
 
 $(LIBPC): $(LIBPC).in ../VERSION

Reply via email to