aboutsummaryrefslogtreecommitdiffstats
path: root/src/if_wg.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-04-30 10:26:51 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2021-04-30 10:28:39 +0200
commitcad7ead734ba3e6db77f9d64ea3dc44a4f01122e (patch)
tree8526cae83c7ccf75954a71276186beff9a54ab8d /src/if_wg.c
parentif_wg: defragment mbufs early on (diff)
downloadwireguard-freebsd-cad7ead734ba3e6db77f9d64ea3dc44a4f01122e.tar.xz
wireguard-freebsd-cad7ead734ba3e6db77f9d64ea3dc44a4f01122e.zip
if_wg: return to m temporary variable style
The rest of the code uses this, so go with it for now. Maybe later ncon will want to clean up everything to be this way, but for now keep it consistent. This partially reverts commit a1fdf6646b16ec26c741089102346f5455dc5fed, but doesn't reintroduce the bug that it had fixed. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/if_wg.c')
-rw-r--r--src/if_wg.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/if_wg.c b/src/if_wg.c
index 727c062..ad64e3a 100644
--- a/src/if_wg.c
+++ b/src/if_wg.c
@@ -1304,7 +1304,9 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
struct wg_pkt_initiation *init;
struct wg_pkt_response *resp;
struct wg_pkt_cookie *cook;
+ struct wg_endpoint *e;
struct wg_peer *peer;
+ struct mbuf *m;
struct noise_remote *remote = NULL;
int res;
bool underload = false;
@@ -1319,16 +1321,19 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
wg_last_underload = 0;
}
- if ((pkt->p_mbuf = m_pullup(pkt->p_mbuf, pkt->p_mbuf->m_pkthdr.len)) == NULL)
+ m = pkt->p_mbuf;
+ e = &pkt->p_endpoint;
+
+ if ((pkt->p_mbuf = m = m_pullup(m, m->m_pkthdr.len)) == NULL)
goto error;
- switch (*mtod(pkt->p_mbuf, uint32_t *)) {
+ switch (*mtod(m, uint32_t *)) {
case WG_PKT_INITIATION:
- init = mtod(pkt->p_mbuf, struct wg_pkt_initiation *);
+ init = mtod(m, struct wg_pkt_initiation *);
res = cookie_checker_validate_macs(&sc->sc_cookie, &init->m,
init, sizeof(*init) - sizeof(init->m),
- underload, &pkt->p_endpoint.e_remote.r_sa,
+ underload, &e->e_remote.r_sa,
sc->sc_ifp->if_vnet);
if (res == EINVAL) {
@@ -1338,7 +1343,7 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
DPRINTF(sc, "Handshake ratelimited\n");
goto error;
} else if (res == EAGAIN) {
- wg_send_cookie(sc, &init->m, init->s_idx, &pkt->p_endpoint);
+ wg_send_cookie(sc, &init->m, init->s_idx, e);
goto error;
} else if (res != 0) {
panic("unexpected response: %d\n", res);
@@ -1354,15 +1359,15 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
DPRINTF(sc, "Receiving handshake initiation from peer %" PRIu64 "\n", peer->p_id);
- wg_peer_set_endpoint(peer, &pkt->p_endpoint);
+ wg_peer_set_endpoint(peer, e);
wg_send_response(peer);
break;
case WG_PKT_RESPONSE:
- resp = mtod(pkt->p_mbuf, struct wg_pkt_response *);
+ resp = mtod(m, struct wg_pkt_response *);
res = cookie_checker_validate_macs(&sc->sc_cookie, &resp->m,
resp, sizeof(*resp) - sizeof(resp->m),
- underload, &pkt->p_endpoint.e_remote.r_sa,
+ underload, &e->e_remote.r_sa,
sc->sc_ifp->if_vnet);
if (res == EINVAL) {
@@ -1372,7 +1377,7 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
DPRINTF(sc, "Handshake ratelimited\n");
goto error;
} else if (res == EAGAIN) {
- wg_send_cookie(sc, &resp->m, resp->s_idx, &pkt->p_endpoint);
+ wg_send_cookie(sc, &resp->m, resp->s_idx, e);
goto error;
} else if (res != 0) {
panic("unexpected response: %d\n", res);
@@ -1387,12 +1392,12 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
peer = noise_remote_arg(remote);
DPRINTF(sc, "Receiving handshake response from peer %" PRIu64 "\n", peer->p_id);
- wg_peer_set_endpoint(peer, &pkt->p_endpoint);
+ wg_peer_set_endpoint(peer, e);
wg_timers_event_session_derived(peer);
wg_timers_event_handshake_complete(peer);
break;
case WG_PKT_COOKIE:
- cook = mtod(pkt->p_mbuf, struct wg_pkt_cookie *);
+ cook = mtod(m, struct wg_pkt_cookie *);
if ((remote = noise_remote_index(sc->sc_local, cook->r_idx)) == NULL) {
DPRINTF(sc, "Unknown cookie index\n");
@@ -1418,9 +1423,9 @@ wg_handshake(struct wg_softc *sc, struct wg_packet *pkt)
wg_timers_event_any_authenticated_packet_traversal(peer);
not_authenticated:
- counter_u64_add(peer->p_rx_bytes, pkt->p_mbuf->m_pkthdr.len);
+ counter_u64_add(peer->p_rx_bytes, m->m_pkthdr.len);
if_inc_counter(sc->sc_ifp, IFCOUNTER_IPACKETS, 1);
- if_inc_counter(sc->sc_ifp, IFCOUNTER_IBYTES, pkt->p_mbuf->m_pkthdr.len);
+ if_inc_counter(sc->sc_ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len);
error:
if (remote != NULL)
noise_remote_put(remote);