X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=be3fd3fb41c094d0612d8f2b4ffc2e147f2cc7df;hp=af644d3597621d2ad04de3bac77f7d78be1b01a7;hb=768e3101e9e4e22e0d775ca1191549d825b679d3;hpb=0f1a49d52e94c258e444548c34903d27346d8a52 diff --git a/bin/blhc b/bin/blhc index af644d3..be3fd3f 100755 --- a/bin/blhc +++ b/bin/blhc @@ -201,6 +201,9 @@ my @def_cflags_stack = ( '-fstack-protector', '--param[= ]ssp-buffer-size=4', ); +my @def_cflags_stack_strong = ( + '-fstack-protector-strong', +); my @def_cflags_pie = ( '-fPIE', ); @@ -241,6 +244,7 @@ my @flag_refs = ( \@def_cflags_format, \@def_cflags_fortify, \@def_cflags_stack, + \@def_cflags_stack_strong, \@def_cflags_pie, \@def_cxxflags, \@def_cppflags, @@ -699,6 +703,7 @@ foreach my $file (@ARGV) { my $harden_format = 1; my $harden_fortify = 1; my $harden_stack = 1; + my $harden_stack_strong = 1; my $harden_relro = 1; my $harden_bindnow = $option_bindnow; # defaults to 0 my $harden_pie = $option_pie; # defaults to 0 @@ -728,11 +733,25 @@ foreach my $file (@ARGV) { # # Packages which were built before 1.16.1 but used their own hardening # flags are not checked. + # + # Strong stack protector is used since dpkg 1.17.11. if ($option_buildd and index($line, 'Toolchain package versions: ') == 0) { require Dpkg::Version; - if (not $line =~ /\bdpkg-dev_(\S+)/ - or Dpkg::Version::version_compare($1, '1.16.1') < 0) { + + my $disable = 1; + my $disable_strong = 1; + + if ($line =~ /\bdpkg-dev_(\S+)/) { + if (Dpkg::Version::version_compare($1, '1.16.1') >= 0) { + $disable = 0; + } + if (Dpkg::Version::version_compare($1, '1.17.11') >= 0) { + $disable_strong = 0; + } + } + + if ($disable) { $harden_format = 0; $harden_fortify = 0; $harden_stack = 0; @@ -740,6 +759,9 @@ foreach my $file (@ARGV) { $harden_bindnow = 0; $harden_pie = 0; } + if ($disable_strong) { + $harden_stack_strong = 0; + } } # The following two versions of CMake in Debian obeyed CPPFLAGS, but @@ -975,6 +997,10 @@ foreach my $file (@ARGV) { } if ($cpu =~ /^(?:ia64|alpha|mips|mipsel|hppa)$/ or $arch eq 'arm') { $harden_stack = 0; + $harden_stack_strong = 0; + } + if ($arch =~ /^(?:m68k|or1k|powerpcspe|sh4|x32)$/) { + $harden_stack_strong = 0; } if ($cpu =~ /^(?:ia64|hppa|avr32)$/) { $harden_relro = 0; @@ -993,7 +1019,10 @@ foreach my $file (@ARGV) { @cxxflags = (@cxxflags, @def_cflags_pie); @ldflags = (@ldflags, @def_ldflags_pie); } - if ($harden_stack) { + if ($harden_stack_strong) { + @cflags = (@cflags, @def_cflags_stack_strong); + @cxxflags = (@cxxflags, @def_cflags_stack_strong); + } elsif ($harden_stack) { @cflags = (@cflags, @def_cflags_stack); @cxxflags = (@cxxflags, @def_cflags_stack); }