X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=1d35e0ba489008f5c2eee8bab499256e0445d2b3;hp=87a798810773fda45e7404de658b2a2ddbb4fe22;hb=d6333e474554290abc21a27bbd1de7e0be1a4e10;hpb=a98be1bc5f253c876681cb133896d72d527fff1c diff --git a/bin/blhc b/bin/blhc index 87a7988..1d35e0b 100755 --- a/bin/blhc +++ b/bin/blhc @@ -31,8 +31,10 @@ our $VERSION = '0.01'; # Regex to catch compiler commands. my $cc_regex = qr/ - (? \$option_help, - 'version' => \$option_version, + 'help|h|?' => \$option_help, + 'version' => \$option_version, # Hardening options. - 'pie' => \$option_pie, - 'bindnow' => \$option_bindnow, - 'all' => \$option_all, + 'pie' => \$option_pie, + 'bindnow' => \$option_bindnow, + 'all' => \$option_all, # Ignore. 'ignore-flag=s' => \@option_ignore_flag, 'ignore-line=s' => \@option_ignore_line, # Misc. - 'color' => \$option_color, - 'arch=s' => \$option_arch, - 'buildd' => \$option_buildd, + 'color' => \$option_color, + 'arch=s' => \$option_arch, + 'buildd' => \$option_buildd, ) or scalar @ARGV == 0) { require Pod::Usage; @@ -711,10 +713,10 @@ foreach my $file (@ARGV) { my ($abi, $os, $cpu) = Dpkg::Arch::debarch_to_debtriplet($arch); # Disable unsupported hardening options. - if ($cpu =~ /^(ia64|alpha|mips|mipsel|hppa)$/ or $arch eq 'arm') { + if ($cpu =~ /^(?:ia64|alpha|mips|mipsel|hppa)$/ or $arch eq 'arm') { $harden_stack = 0; } - if ($cpu =~ /^(ia64|hppa|avr32)$/) { + if ($cpu =~ /^(?:ia64|hppa|avr32)$/) { $harden_relro = 0; $harden_bindnow = 0; } @@ -963,8 +965,12 @@ B [I] Idpkg-buildpackage build log fileE..> =head1 DESCRIPTION -blhc is a small tool which checks build logs for missing hardening flags and -other important warnings. It's licensed under the GPL 3 or later. +blhc is a small tool which checks build logs for missing hardening flags. It's +licensed under the GPL 3 or later. + +It's designed to check build logs generated by Debian's dpkg-buildpackage (or +tools using dpkg-buildpackage like pbuilder or the official buildd build logs) +to help maintainers detect missing hardening flags in their packages. =head1 OPTIONS @@ -994,8 +1000,8 @@ changes are in effect: =item -Print tags instead of normal warnings, see README file for a list of possible -tags. +Print tags instead of normal warnings, see L for a list of +possible tags. =item @@ -1047,6 +1053,84 @@ Auto detection for B<--pie> and B<--bindnow> only works if at least one command uses the required hardening flag (e.g. -fPIE). Then it's required for all other commands as well. +=head1 EXAMPLES + +Normal usage, parse a single log file. + + blhc path/to/log/file + +Parse multiple log files. The exit code is ORed over all files. + + blhc path/to/directory/with/log/files/* + +Don't treat missing C<-g> as error: + + blhc --ignore-flag -g path/to/log/file + +Ignore lines consisting exactly of C<./script gcc file> which would cause a +false positive. + + blhc --ignore-line '\./script gcc file' path/to/log/file + +Ignore lines matching C<./script gcc file> somewhere in the line. + + blhc --ignore-line '.*\./script gcc file.*' path/to/log/file + +Use blhc with pbuilder. + + pbuilder path/to/package.dsc | tee path/log/file + blhc path/to/file || echo flags missing + +=head1 BUILDD TAGS + +The following tags are used in I<--buildd> mode. In braces the additional data +which is displayed. + +=over 2 + +=item + +B + +The package uses hardening-wrapper which intercepts calls to gcc and adds +hardening flags. The build log doesn't contain any hardening flags and thus +can't be checked by blhc. + +=item + +B (summary of hidden lines) + +Build log contains lines which hide the real compiler flags. For example: + + CC test-a.c + CC test-b.c + CC test-c.c + LD test + +Most of the time either C or C in +F fixes builds with hidden compiler flags. Sometimes C<.SILENT> +in a F must be removed. And as last resort the F must be +patched to remove the C<@>s hiding the real compiler commands. + +=item + +B (summary of missing flags) + +CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS missing. + +=item + +B (version) + +=item + +B + +No compiler commands were detected. Either the log contains none or they were +not correctly detected by blhc (please report the bug in this case). + +=back + =head1 EXIT STATUS The exit status is a "bit mask", each listed status is ORed when the error @@ -1084,6 +1168,9 @@ Hardening wrapper detected, no tests performed. Simon Ruderich, Esimon@ruderich.orgE +Thanks to to Bernhard R. Link Ebrlink@debian.orgE and Jaria Alto +Ejari.aalto@cante.netE for their valuable input and suggestions. + =head1 COPYRIGHT AND LICENSE Copyright (C) 2012 by Simon Ruderich @@ -1101,4 +1188,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . +=head1 SEE ALSO + +L, L + =cut