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)
This commit is contained in:
Kristof Provost 2023-03-20 14:26:33 +01:00
parent cc9158d74d
commit 844ad2828a

View File

@ -1827,8 +1827,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;
}
NET_EPOCH_ENTER(et);
CURVNET_SET(sc->sc_sync_if->if_vnet);