diff options
| author | Kristof Provost <kp@FreeBSD.org> | 2022-11-10 12:54:09 +0000 |
|---|---|---|
| committer | Kristof Provost <kp@FreeBSD.org> | 2022-11-14 08:36:44 +0000 |
| commit | 6905fd01cb64ca2853b8312880f18a6ae2068099 (patch) | |
| tree | ca507f831a3547fd2c40cbf8c3e9a11614228992 | |
| parent | 882fc6da1a5f810b18971329a31663498e61bbbf (diff) | |
| -rw-r--r-- | sys/net/if_ovpn.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/net/if_ovpn.c b/sys/net/if_ovpn.c index 94d12fa25f1a..6ce5d07dc230 100644 --- a/sys/net/if_ovpn.c +++ b/sys/net/if_ovpn.c @@ -410,6 +410,8 @@ ovpn_peer_release_ref(struct ovpn_kpeer *peer, bool locked) { struct ovpn_softc *sc; + CURVNET_ASSERT_SET(); + atomic_add_int(&peer->refcount, -1); if (atomic_load_int(&peer->refcount) > 0) @@ -427,6 +429,8 @@ ovpn_peer_release_ref(struct ovpn_kpeer *peer, bool locked) } } + OVPN_ASSERT(sc); + /* The peer should have been removed from the list already. */ MPASS(ovpn_find_peer(sc, peer->peerid) == NULL); @@ -633,6 +637,7 @@ _ovpn_del_peer(struct ovpn_softc *sc, uint32_t peerid) int i; OVPN_WASSERT(sc); + CURVNET_ASSERT_SET(); for (i = 0; i < OVPN_MAX_PEERS; i++) { if (sc->peers[i] == NULL) @@ -1441,17 +1446,19 @@ ovpn_encrypt_tx_cb(struct cryptop *crp) int tunnel_len; int ret; + CURVNET_SET(sc->ifp->if_vnet); + NET_EPOCH_ENTER(et); + if (crp->crp_etype != 0) { crypto_freereq(crp); ovpn_peer_release_ref(peer, false); + NET_EPOCH_EXIT(et); + CURVNET_RESTORE(); OVPN_COUNTER_ADD(sc, lost_data_pkts_out, 1); m_freem(m); return (0); } - NET_EPOCH_ENTER(et); - CURVNET_SET(sc->ifp->if_vnet); - MPASS(crp->crp_buf.cb_type == CRYPTO_BUF_MBUF); tunnel_len = m->m_pkthdr.len - sizeof(struct ovpn_wire_header); @@ -1461,12 +1468,12 @@ ovpn_encrypt_tx_cb(struct cryptop *crp) OVPN_COUNTER_ADD(sc, tunnel_bytes_sent, tunnel_len); } - CURVNET_RESTORE(); - NET_EPOCH_EXIT(et); - crypto_freereq(crp); ovpn_peer_release_ref(peer, false); + NET_EPOCH_EXIT(et); + CURVNET_RESTORE(); + return (0); } |
