RFR: 8241996: on linux set full relro in the linker flags

Baesken, Matthias matthias.baesken at sap.com
Wed Apr 1 13:35:12 UTC 2020


Hello, please review this binary hardening related change.

To improve binary hardening, we should enable full relro in the OpenJDK builds. Currently
our build settings enable only partial relro (they miss z,now).
See https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro

"Both partial and full RELRO reorder the ELF internal data sections to protect them from being overwritten in the event of a buffer-overflow,
but only full RELRO mitigates the above mentioned popular technique of overwriting the GOT entry to get control of program execution."

See also :
https://wiki.debian.org/Hardening

Some documentations/blogs mention slight performance impact of full relro (for startup performance) .

My quick checks on an example Linux server show not much impact (checked on linux x86_64) .
1)time on a   java HelloWorld  varies   (for both a patched and  unpatched  JDK)    between 0,6 and 0,7 seconds  ;
2) perf - runs on a java HelloWorld   show  a bit less  cycles (not clear why) but more  instructions :


> "normal  JVM" :

>         185,085,660      cycles                    #    2.424 GHz                      ( +-  0.54% )  (83.18%)

>         128,415,594      stalled-cycles-frontend   #   69.38% frontend cycles idle     ( +-  0.80% )  (80.98%)

>          84,990,433      stalled-cycles-backend    #   45.92% backend  cycles idle     ( +-  1.78% )  (65.38%)

>         102,950,894      instructions              #    0.56  insns per cycle

>                                                    #    1.25  stalled cycles per insn  ( +-  1.48% )  (86.90%)

>

> Changed JVM with z,now  set :

>

>         182,514,813      cycles                    #    2.394 GHz                      ( +-  0.58% )  (80.14%)

>         126,879,112      stalled-cycles-frontend   #   69.52% frontend cycles idle     ( +-  0.81% )  (81.24%)

>          82,691,295      stalled-cycles-backend    #   45.31% backend  cycles idle     ( +-  1.72% )  (69.16%)

>         103,958,399      instructions              #    0.57  insns per cycle

>                                                    #    1.22  stalled cycles per insn  ( +-  1.21% )  (89.47%)


Bug/webrev :

https://bugs.openjdk.java.net/browse/JDK-8241996

http://cr.openjdk.java.net/~mbaesken/webrevs/8241996.0/


Best regards, Matthias



More information about the build-dev mailing list