Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Jan 2024 05:39:25 GMT
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 86986d381072 - stable/14 - if_wg: fix erroneous calculation in calculate_padding() for p_mtu == 0
Message-ID:  <202401300539.40U5dPBE019288@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/14 has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=86986d381072171a5d6183701ae2f96c2d9a6406

commit 86986d381072171a5d6183701ae2f96c2d9a6406
Author:     Aaron LI <aly@aaronly.me>
AuthorDate: 2024-01-17 23:29:23 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2024-01-30 05:37:29 +0000

    if_wg: fix erroneous calculation in calculate_padding() for p_mtu == 0
    
    In practice this is harmless; only keepalive packets may realistically have
    p_mtu == 0, and they'll also have no payload so the math works out the same
    either way.  Still, let's prefer technical accuracy and calculate the amount
    of padding needed rather than the padded length...
    
    PR:             276363
    
    (cherry picked from commit b891f61ef538a4e9b4658b4b756635c8036a5788)
---
 sys/dev/wg/if_wg.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/sys/dev/wg/if_wg.c b/sys/dev/wg/if_wg.c
index 0ea40b763416..738b1e76fa85 100644
--- a/sys/dev/wg/if_wg.c
+++ b/sys/dev/wg/if_wg.c
@@ -1461,8 +1461,12 @@ calculate_padding(struct wg_packet *pkt)
 {
 	unsigned int padded_size, last_unit = pkt->p_mbuf->m_pkthdr.len;
 
-	if (__predict_false(!pkt->p_mtu))
-		return (last_unit + (WG_PKT_PADDING - 1)) & ~(WG_PKT_PADDING - 1);
+	/* Keepalive packets don't set p_mtu, but also have a length of zero. */
+	if (__predict_false(pkt->p_mtu == 0)) {
+		padded_size = (last_unit + (WG_PKT_PADDING - 1)) &
+		    ~(WG_PKT_PADDING - 1);
+		return (padded_size - last_unit);
+	}
 
 	if (__predict_false(last_unit > pkt->p_mtu))
 		last_unit %= pkt->p_mtu;
@@ -1470,7 +1474,7 @@ calculate_padding(struct wg_packet *pkt)
 	padded_size = (last_unit + (WG_PKT_PADDING - 1)) & ~(WG_PKT_PADDING - 1);
 	if (pkt->p_mtu < padded_size)
 		padded_size = pkt->p_mtu;
-	return padded_size - last_unit;
+	return (padded_size - last_unit);
 }
 
 static void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202401300539.40U5dPBE019288>