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:
parent
cc9158d74d
commit
844ad2828a
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user