aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorKristof Provost <kp@FreeBSD.org>2023-02-02 09:34:57 +0000
committerKristof Provost <kp@FreeBSD.org>2023-02-03 08:39:09 +0000
commit0ed5f66c5ad23a6fe02d60765acf5e5e00957542 (patch)
tree0a938d0b1af8c5ed91dbf4943276e6a34570d3a8 /sys
parentfdbfaefefa585537273955fc88d7daf5e86c6f2d (diff)
downloadsrc-0ed5f66c5ad23a6fe02d60765acf5e5e00957542.tar.gz
src-0ed5f66c5ad23a6fe02d60765acf5e5e00957542.zip
pfsync: add missing bucket lock
pfsync_q_ins() expects us to hold the bucket lock, but when we enter it from pfsync_state_import() we don't. MFC after: 2 weeks
Diffstat (limited to 'sys')
-rw-r--r--sys/netpfil/pf/if_pfsync.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/netpfil/pf/if_pfsync.c b/sys/netpfil/pf/if_pfsync.c
index 3aa9bbfb633f..2301dc475e27 100644
--- a/sys/netpfil/pf/if_pfsync.c
+++ b/sys/netpfil/pf/if_pfsync.c
@@ -605,7 +605,11 @@ pfsync_state_import(struct pfsync_state *sp, int flags)
if (!(flags & PFSYNC_SI_IOCTL)) {
st->state_flags &= ~PFSTATE_NOSYNC;
if (st->state_flags & PFSTATE_ACK) {
+ struct pfsync_bucket *b = pfsync_get_bucket(sc, st);
+ PFSYNC_BUCKET_LOCK(b);
pfsync_q_ins(st, PFSYNC_S_IACK, true);
+ PFSYNC_BUCKET_UNLOCK(b);
+
pfsync_push_all(sc);
}
}