[pve-devel] [PATCH proxmox-firewall v2 1/1] service: flush firewall rules on force disable
Gabriel Goller
g.goller at proxmox.com
Thu Jul 4 15:36:21 CEST 2024
On 04.07.2024 14:36, Stefan Hanreich wrote:
>When disabling the nftables firewall again, there is a race condition
>where the nftables ruleset never gets flushed and persists after
>disabling.
>
>The nftables firewall update loop does a noop when the force disable
>file exists. It only flushes the ruleset when nftables is disabled in
>the configuration file but the force disable file does not yet exist.
>
>This can lead to the following situation:
>
>* nftables is activated and created its ruleset
>* user switches from nftables firewall back to iptables firewall
>* pve-firewall runs and creates the force disable file
>* proxmox-firewall sees that the file exists and does nothing
>
>Reported-by: Hannes Laimer <h.laimer at proxmox.com>
>Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
>---
>Changes from v1 to v2:
>* Removed misleading/wrong section about the probability of this
> happening
>* Added a detailed description of the scenario this commit prevents
>
> proxmox-firewall/src/bin/proxmox-firewall.rs | 4 ++++
> 1 file changed, 4 insertions(+)
>
>diff --git a/proxmox-firewall/src/bin/proxmox-firewall.rs b/proxmox-firewall/src/bin/proxmox-firewall.rs
>index f7e816e..5133cbf 100644
>--- a/proxmox-firewall/src/bin/proxmox-firewall.rs
>+++ b/proxmox-firewall/src/bin/proxmox-firewall.rs
>@@ -91,6 +91,10 @@ fn main() -> Result<(), std::io::Error> {
>
> while !term.load(Ordering::Relaxed) {
> if force_disable_flag.exists() {
>+ if let Err(error) = remove_firewall() {
>+ log::error!("unable to disable firewall: {error:#}");
Note that `std::io::Error` does not handle pretty-printing any different
in `Display`. So this outputs the same as '{error}'. To also print the
`ErrorKind` use either '{error:?}' or '{error:#?}', which produce:
Custom { kind: NotFound, error: "cool" }
or
Custom {
kind: NotFound,
error: "cool",
}
>+ }
>+
> std::thread::sleep(Duration::from_secs(5));
> continue;
> }
>--
>2.39.2
>
>
>_______________________________________________
>pve-devel mailing list
>pve-devel at lists.proxmox.com
>https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list