Source: ocaml
Version: 4.02.3-7
Severity: important
User: bal...@balintreczey.hu
Usertags: pie-bindnow-20160906
Justification: makes other ocaml packages FTBFS with extra hardening
Tags: patch
Affects: advi alt-ergo approx ara atdgen ben biniou bin-prot caml2html 
caml-crush camlimages camlmix camlp5 camomile cduce coccinelle coinst 
comparelib confluence coq cppo cryptokit cudf custom-printf dochelp dose3 eliom 
enumerate extlib fieldslib freetennis geneweb gmetadom haxe herelib janest-core 
janest-core-extended janest-core-kernel js-build-tools js-of-ocaml jsonm 
kalzium laby lambda-term libguestfs liquidsoap marionnet matita menhir 
mingw-ocaml misery mlpost monotone-viz mtasc oasis obus ocaml-atd ocaml-base64 
ocaml-batteries ocaml-benchmark ocamlbricks ocamlcreal ocaml-csv 
ocaml-data-notation ocaml-deriving-ocsigen ocamldsort ocaml-estring 
ocaml-expect ocaml-extunix ocaml-fileutils ocaml-gettext ocamlgraph ocamlgsl 
ocaml-ipaddr ocaml-libvirt ocaml-melt ocamlmod ocaml-re ocaml-re2 ocaml-reins 
ocaml-res ocamlrss ocaml-sqlexpr ocaml-sqlite3 ocaml-textutils ocaml-usb 
ocamlviz ocaml-zarith ocp-indent ocsigenserver opam optcomp orpie ounit 
pa-bench pagodacf pa-ounit pa-structural-sexp pa-test pcre-ocaml pdfsandwich 
perl4caml pgocaml pipebang postgresql-ocaml ppx-core ppx-deriving ppx-driver 
ppx-optcomp ppx-sexp-conv ppx-type-conv prooftree scilab sexplib310 spamoracle 
supermin type-conv typerep tyxml unison utop uuidm variantslib virt-top why3 
wyrd xml-light xmlm yojson zed

Dear Maintainers,

During a rebuild of all packages in sid, many ocaml packages
failed to build on amd64 with patched GCC and dpkg. The root cause
seems to be that libasmrun.a is shipped as a non-PIC library.

The rebuild tested if packages are ready for a transition
enabling PIE and bindnow for amd64.

For more information about the changes to sid's dpkg and GCC please
visit:
https://wiki.debian.org/Hardening/PIEByDefaultTransitio

Relevant part of advi's build log:
...
/usr/bin/ocamlopt -o advi \
         -I /usr/lib/ocaml/camlimages  \
        events.o grwm.o grY11.o /usr/lib/ocaml/camlimages/camlimages_core.cmxa 
/usr/lib/ocaml/graphics
.cmxa /usr/lib/ocaml/camlimages/camlimages_graphics.cmxa 
/usr/lib/ocaml/camlimages/camlimages_ps.cmxa 
/usr/lib/ocaml/camlimages/camlimages_freetype.cmxa unix.cmxa str.cmxa 
config.cmx misc.cmx timeout.cmx 
ageometry.cmx options.cmx rc.cmx userfile.cmx graphicsY11.cmx 
global_options.cmx busy.cmx gradient.cmx gterm.cmx launch.cmx dvicolor.cmx 
shot.cmx laser_pointer.cmx symbol.cmx input.cmx table.cmx pkfont.cmx ttfont.cmx 
jfm.cmx search.cmx font.cmx glyph.cmx devfont.cmx adviUnits.cmx dimension.cmx 
dvi.cmx drawimage.cmx gs.cmx transimpl.cmx embed.cmx grdev.cmx addons.cmx 
scratch.cmx cdvi.cmx driver.cmx thumbnails.cmx dviview.cmx main.cmx \
        -cclib -lXinerama -cclib -lcamlimages_freetype
/usr/bin/ld: /usr/lib/ocaml/libasmrun.a(startup.o): relocation R_X86_64_32 
against `.rodata.str1.1' can not be used when making a shared object; recompile 
with -fPIC
/usr/bin/ld: /usr/lib/ocaml/libasmrun.a(fail.o): relocation R_X86_64_32 against 
symbol `caml_exn_Failure' can not be used when making a shared object; 
recompile with -fPIC
...

The full build log is available from:
https://people.debian.org/~rbalint/build-logs/pie-bindnow-20160906/advi_1.10.2-2_amd64.build.gz

The attached patch fixed the problem.

Thanks,
Balint


diff -Nru ocaml-4.02.3/debian/patches/0012-Use-pic.patch ocaml-4.02.3/debian/patches/0012-Use-pic.patch
--- ocaml-4.02.3/debian/patches/0012-Use-pic.patch	1970-01-01 01:00:00.000000000 +0100
+++ ocaml-4.02.3/debian/patches/0012-Use-pic.patch	2016-09-10 13:38:10.000000000 +0200
@@ -0,0 +1,17 @@
+Description: Generate Position Independent Code
+ This is needed for building Position Independent Executables
+Author: Balint Reczey <bal...@balintreczey.hu>
+
+--- ocaml-4.02.3.orig/configure
++++ ocaml-4.02.3/configure
+@@ -1015,6 +1015,10 @@ fi
+ bytecccompopts="$bytecccompopts -D_FILE_OFFSET_BITS=64"
+ nativecccompopts="$nativecccompopts -D_FILE_OFFSET_BITS=64"
+ 
++# Use PIC
++
++nativecccompopts="$nativecccompopts -fPIC"
++
+ # Check the semantics of signal handlers
+ 
+ if sh ./hasgot sigaction sigprocmask; then
diff -Nru ocaml-4.02.3/debian/patches/series ocaml-4.02.3/debian/patches/series
--- ocaml-4.02.3/debian/patches/series	2016-07-15 22:20:10.000000000 +0200
+++ ocaml-4.02.3/debian/patches/series	2016-09-10 13:36:09.000000000 +0200
@@ -9,3 +9,4 @@
 0010-Enable-ocamldoc-to-build-reproducible-manpages.patch
 0010-Add-a-.file-directive-to-generated-.s-files.patch
 0011-Compatibility-with-x32-architecture.patch
+0012-Use-pic.patch

Reply via email to