1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-07 18:35:49 -04:00

Use Permute::Named::Iter instead of glob for generating permuted syscalls

This commit is contained in:
Ryan Voots 2017-05-14 02:59:53 -04:00
parent e803ec6ec1
commit b8e6138d19
2 changed files with 6 additions and 7 deletions

View file

@ -98,3 +98,4 @@ requires 'Twitter::API' => 0;
requires 'Types::Standard' => 0; requires 'Types::Standard' => 0;
requires 'Perl::Tidy' => 0; requires 'Perl::Tidy' => 0;
requires 'File::Temp' => 0; requires 'File::Temp' => 0;
requires 'Permute::Named::Iter' => 0;

View file

@ -10,6 +10,7 @@ use Linux::Clone;
use POSIX; use POSIX;
use Linux::Seccomp; use Linux::Seccomp;
use Carp qw/croak/; use Carp qw/croak/;
use Permute::Named::Iter qw/permute_named_iter/;
use constant { use constant {
CLONE_FILES => Linux::Clone::FILES, CLONE_FILES => Linux::Clone::FILES,
@ -327,18 +328,15 @@ sub build_seccomp {
croak "Permutation on syscall rule without actual permutation specified" if (!@perm_on); croak "Permutation on syscall rule without actual permutation specified" if (!@perm_on);
my $glob_string = join '__', map { "{".join(",", @{$full_permute{$_}})."}" } @perm_on; my %perm_hash = map {$_ => $full_permute{$_}} @perm_on;
my @globs = grep {defined $_ && $_ ne ''} glob $glob_string; my $iter = permute_named_iter(%perm_hash);
die "Too many permute options for syscall $syscall" unless (@globs >= 1);
for my $g_value (glob $glob_string) { while (my $pvals = $iter->()) {
my %pvals;
@pvals{@perm_on} = split /__/, $g_value;
push @{$comp_rules{$syscall}}, push @{$comp_rules{$syscall}},
[map { [map {
my @r = @$_; my @r = @$_;
$r[2] = $pvals{${$r[2]}}; $r[2] = $pvals->{${$r[2]}};
\@r; \@r;
} @{$rule->{permute_rules}}]; } @{$rule->{permute_rules}}];
} }