From: Thomas Lamprecht Date: Tue, 28 May 2019 06:06:39 +0000 (+0200) Subject: fix CT rule generation with ipfilter set X-Git-Url: https://git.proxmox.com/?p=pve-firewall.git;a=commitdiff_plain;h=0398480886f82189988edcd00fa20683cbbed4ce;hp=1b9bb7f785fc3bf2543d7e681dfe9a7ab37bd525 fix CT rule generation with ipfilter set commit 255698f65192e736708f123d380bbed2aa8c3eac tried to prevent an error from happening but wasn't to well thought out, perl's operator precedence was overlooked. The commit resulted effectively in: if (my $ip = ($net->{ip} && $vmfw_conf->{options}->{ipfilter})) ... But intended was: if (defined(my $ip = $net->{ip}) && $vmfw_conf->{options}->{ipfilter}) ... First one makes $ip always boolean true (1 in perl) if the if branch is hit, and the seconds really has then the $ip value in it.. Signed-off-by: Thomas Lamprecht --- diff --git a/src/PVE/Firewall.pm b/src/PVE/Firewall.pm index abcc1e8..b08cea5 100644 --- a/src/PVE/Firewall.pm +++ b/src/PVE/Firewall.pm @@ -3782,7 +3782,7 @@ sub compile_ebtables_filter { push(@$arpfilter, $ip); } } - if (my $ip = $net->{ip} && $vmfw_conf->{options}->{ipfilter}) { + if (defined(my $ip = $net->{ip}) && $vmfw_conf->{options}->{ipfilter}) { # ebtables changes this to a .0/MASK network but we just # want the address here, no network - see #2193 $ip =~ s|/(\d+)$||;