git: 1d6ece4351a0 - stable/12 - pfsync: add missing unlock in pfsync_defer_tmo()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 27 Mar 2023 08:16:38 UTC
The branch stable/12 has been updated by kp:
URL: https://cgit.FreeBSD.org/src/commit/?id=1d6ece4351a01179e3a5ebbdb3fa2e6053a2d7aa
commit 1d6ece4351a01179e3a5ebbdb3fa2e6053a2d7aa
Author: Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2023-03-20 13:26:33 +0000
Commit: Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-03-27 00:28:37 +0000
pfsync: add missing unlock in pfsync_defer_tmo()
The callout for pfsync_defer_tmo() is created with
CALLOUT_RETURNUNLOCKED, because while the callout framework takes care
of taking the lock we want to run a few operations outside of the lock,
so we unlock ourselves.
However, if `sc->sc_sync_if == NULL` we return without releasing the
lock, and leak the lock, causing later deadlocks.
Ensure we always release the bucket lock when we exit pfsync_defer_tmo()
PR: 268246
MFC after: 1 week
Sponsored by: Rubicon Communications, LLC (Netgate)
(cherry picked from commit 844ad2828a35c434b893af4274b1f6c50332dd70)
---
sys/netpfil/pf/if_pfsync.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c
index 6a67b8fe3d80..a73b4ff95c6a 100644
--- a/sys/netpfil/pf/if_pfsync.c
+++ b/sys/netpfil/pf/if_pfsync.c
@@ -1831,8 +1831,10 @@ pfsync_defer_tmo(void *arg)
PFSYNC_BUCKET_LOCK_ASSERT(b);
- if (sc->sc_sync_if == NULL)
+ if (sc->sc_sync_if == NULL) {
+ PFSYNC_BUCKET_UNLOCK(b);
return;
+ }
CURVNET_SET(sc->sc_sync_if->if_vnet);