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

Claes Redestad claes.redestad at oracle.com
Wed Apr 1 13:53:45 UTC 2020


Hi,

I took this for a spin on my setup, and see a ~500k increase in both
instructions and cycles - I guess one of your runs saw more
interference than the other.

 From a startup performance point of view the advertised cost seems
more or less negligible. (For context we've optimized away 10M
instructions since JDK 14 GA - a 0.5M step in the wrong direction won't
be noticeable)

/Claes

On 2020-04-01 15:35, Baesken, Matthias wrote:
> 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