Flurry of GMP check failures

Torbjörn Granlund tg at gmplib.org
Sat Nov 5 18:06:18 UTC 2016


nisse at lysator.liu.se (Niels Möller) writes:

  tg at gmplib.org (Torbjörn Granlund) writes:
  
  > 2. Something is broken wrt Debian sid from the past few weeks.
  >    It seems they want static lib code to be PIC.
  
  Or rather, PIC code for all executables, to enable randomization of the
  mapping of the text segment into the process address space. I think the
  rationale is documented here: https://wiki.debian.org/Hardening.
  
  Changes to default gcc seem to be described at 
  https://wiki.debian.org/Hardening/PIEByDefaultTransition
  
  It's not entirely clear if and how it's intended to affect builds which
  don't involve debian-specific tools, maybe something is broken.
  
Thanks, this is probably the explanation.  Indeed, Debian seems to have
decided to no longer support the x86-64 ABI without extra options:

sym.c:
  int blah[] = {17,4711,222222,333333};
  int foo(int i) { return blah[i]; }

m.c:
  int foo(int i);
  int main()
  {
    foo (0);
  }

This fails:
  $ gcc sym.c -c -fno-pic && gcc sym.o m.c
  /usr/bin/ld: sym.o: relocation R_X86_64_32S against symbol `blah' can not be
  used when making a shared object; recompile with -fPIC
  /usr/bin/ld: final link failed: Nonrepresentable section on output
  collect2: error: ld returned 1 exit status

This works:
  $ gcc sym.c -c -fno-pic && gcc -static sym.o m.c

This seems like a very heavy-handed way of pushing for ASLR.

Should we be bothered?  Adapting seems quite messy.  I'm migrating from
Debian to Gentoo for GMP's testing, so unless Debian's approach is
gaining momentum in the GNU/Linux world, we could just ignore this.

It would be useful if list readers with other "hardened" systems could
test the example above and report the results here.

-- 
Torbjörn
Please encrypt, key id 0xC8601622


More information about the gmp-devel mailing list