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);