diff mbox series

[ipsec-next] esp: check the NETIF_F_HW_ESP_TX_CSUM bit before segmenting

Message ID 1519684099-3396-1-git-send-email-shannon.nelson@oracle.com
State Awaiting Upstream, archived
Delegated to: David Miller
Headers show
Series [ipsec-next] esp: check the NETIF_F_HW_ESP_TX_CSUM bit before segmenting | expand

Commit Message

Shannon Nelson Feb. 26, 2018, 10:28 p.m. UTC
If I understand correctly, we should not be asking for a
checksum offload on an ipsec packet if the netdev isn't
advertising NETIF_F_HW_ESP_TX_CSUM.  In that case, we should
clear the NETIF_F_CSUM_MASK bits.

Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com>
---
 net/ipv4/esp4_offload.c | 2 ++
 net/ipv6/esp6_offload.c | 2 ++
 2 files changed, 4 insertions(+)

Comments

Steffen Klassert Feb. 28, 2018, 8:41 a.m. UTC | #1
On Mon, Feb 26, 2018 at 02:28:19PM -0800, Shannon Nelson wrote:
> If I understand correctly, we should not be asking for a
> checksum offload on an ipsec packet if the netdev isn't
> advertising NETIF_F_HW_ESP_TX_CSUM.  In that case, we should
> clear the NETIF_F_CSUM_MASK bits.
> 
> Signed-off-by: Shannon Nelson <shannon.nelson@oracle.com>

Patch applied, thanks Shannon!
diff mbox series

Patch

diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c
index da5635f..7cf755e 100644
--- a/net/ipv4/esp4_offload.c
+++ b/net/ipv4/esp4_offload.c
@@ -138,6 +138,8 @@  static struct sk_buff *esp4_gso_segment(struct sk_buff *skb,
 	if (!(features & NETIF_F_HW_ESP) || !x->xso.offload_handle ||
 	    (x->xso.dev != skb->dev))
 		esp_features = features & ~(NETIF_F_SG | NETIF_F_CSUM_MASK);
+	else if (!(features & NETIF_F_HW_ESP_TX_CSUM))
+		esp_features = features & ~NETIF_F_CSUM_MASK;
 
 	xo->flags |= XFRM_GSO_SEGMENT;
 
diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c
index 3fd1ec7..27f59b6 100644
--- a/net/ipv6/esp6_offload.c
+++ b/net/ipv6/esp6_offload.c
@@ -165,6 +165,8 @@  static struct sk_buff *esp6_gso_segment(struct sk_buff *skb,
 	if (!(features & NETIF_F_HW_ESP) || !x->xso.offload_handle ||
 	    (x->xso.dev != skb->dev))
 		esp_features = features & ~(NETIF_F_SG | NETIF_F_CSUM_MASK);
+	else if (!(features & NETIF_F_HW_ESP_TX_CSUM))
+		esp_features = features & ~NETIF_F_CSUM_MASK;
 
 	xo->flags |= XFRM_GSO_SEGMENT;