esp: check the NETIF_F_HW_ESP_TX_CSUM bit before segmenting
authorShannon Nelson <shannon.nelson@oracle.com>
Mon, 26 Feb 2018 22:28:19 +0000 (14:28 -0800)
committerSteffen Klassert <steffen.klassert@secunet.com>
Tue, 27 Feb 2018 09:46:01 +0000 (10:46 +0100)
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>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/ipv4/esp4_offload.c
net/ipv6/esp6_offload.c

index da5635fc52c221698f55d3a84d34944fab5fdc94..7cf755ef9efba3c13fcee22e1a24a320f4d9a503 100644 (file)
@@ -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;
 
index 3fd1ec775dc257e51ea1cbc4e312ced1f2d6b26a..27f59b61f70f59f6b4a4502727a161b5f1b91ef1 100644 (file)
@@ -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;