aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireguard/send.c
diff options
context:
space:
mode:
authorMaxime Ripard <maxime@cerno.tech>2020-04-04 11:02:15 +0200
committerMaxime Ripard <maxime@cerno.tech>2020-04-04 11:02:15 +0200
commitcc46c03397c1865a181f1a4f66d4645806e5a943 (patch)
treee3a762d8961219a61b96ae6e5ec875ba9fbe2314 /drivers/net/wireguard/send.c
parentd8a26d8fc37c5b8b9e95f2fa194f287cf8cab3f4 (diff)
parent0e7e6198af28c1573267aba1be33dd0b7fb35691 (diff)
downloadkernel_replicant_linux-cc46c03397c1865a181f1a4f66d4645806e5a943.tar.gz
kernel_replicant_linux-cc46c03397c1865a181f1a4f66d4645806e5a943.tar.bz2
kernel_replicant_linux-cc46c03397c1865a181f1a4f66d4645806e5a943.zip
Merge drm/drm-next into drm-misc-next-fixes
Alex needs v5.6 into drm-misc-next-fixes to merge a fix for a regression in the scatterlist processing in PRIME. Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Diffstat (limited to 'drivers/net/wireguard/send.c')
-rw-r--r--drivers/net/wireguard/send.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/wireguard/send.c b/drivers/net/wireguard/send.c
index c13260563446..7348c10cbae3 100644
--- a/drivers/net/wireguard/send.c
+++ b/drivers/net/wireguard/send.c
@@ -143,16 +143,22 @@ static void keep_key_fresh(struct wg_peer *peer)
static unsigned int calculate_skb_padding(struct sk_buff *skb)
{
+ unsigned int padded_size, last_unit = skb->len;
+
+ if (unlikely(!PACKET_CB(skb)->mtu))
+ return ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE) - last_unit;
+
/* We do this modulo business with the MTU, just in case the networking
* layer gives us a packet that's bigger than the MTU. In that case, we
* wouldn't want the final subtraction to overflow in the case of the
- * padded_size being clamped.
+ * padded_size being clamped. Fortunately, that's very rarely the case,
+ * so we optimize for that not happening.
*/
- unsigned int last_unit = skb->len % PACKET_CB(skb)->mtu;
- unsigned int padded_size = ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE);
+ if (unlikely(last_unit > PACKET_CB(skb)->mtu))
+ last_unit %= PACKET_CB(skb)->mtu;
- if (padded_size > PACKET_CB(skb)->mtu)
- padded_size = PACKET_CB(skb)->mtu;
+ padded_size = min(PACKET_CB(skb)->mtu,
+ ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE));
return padded_size - last_unit;
}