Commit 75a839c3 authored by David S. Miller's avatar David S. Miller

Merge branch 'udp-gso-fixes'

Willem de Bruijn says:

====================
udp gso fixes

A few small fixes:
- disallow segmentation with XFRM
- do not leak gso packets into the ingress path

Changes
  v1 -> v2
  - fix build failure in team.c
  - drop scatter-gather fix:
      this is now fixed by commit 113f99c3 ("net: test tailroom
      before appending to linear skb"). After this patch gso skbs are
      built non-linear regardless of NETIF_F_SG and skb_segment builds
      linear segs.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents e89e59c0 8eea1ca8
...@@ -1107,7 +1107,8 @@ static void bond_compute_features(struct bonding *bond) ...@@ -1107,7 +1107,8 @@ static void bond_compute_features(struct bonding *bond)
done: done:
bond_dev->vlan_features = vlan_features; bond_dev->vlan_features = vlan_features;
bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL; bond_dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL |
NETIF_F_GSO_UDP_L4;
bond_dev->gso_max_segs = gso_max_segs; bond_dev->gso_max_segs = gso_max_segs;
netif_set_gso_max_size(bond_dev, gso_max_size); netif_set_gso_max_size(bond_dev, gso_max_size);
...@@ -4268,7 +4269,7 @@ void bond_setup(struct net_device *bond_dev) ...@@ -4268,7 +4269,7 @@ void bond_setup(struct net_device *bond_dev)
NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_RX |
NETIF_F_HW_VLAN_CTAG_FILTER; NETIF_F_HW_VLAN_CTAG_FILTER;
bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL; bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
bond_dev->features |= bond_dev->hw_features; bond_dev->features |= bond_dev->hw_features;
} }
......
...@@ -1026,7 +1026,8 @@ static void __team_compute_features(struct team *team) ...@@ -1026,7 +1026,8 @@ static void __team_compute_features(struct team *team)
} }
team->dev->vlan_features = vlan_features; team->dev->vlan_features = vlan_features;
team->dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL; team->dev->hw_enc_features = enc_features | NETIF_F_GSO_ENCAP_ALL |
NETIF_F_GSO_UDP_L4;
team->dev->hard_header_len = max_hard_header_len; team->dev->hard_header_len = max_hard_header_len;
team->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE; team->dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
...@@ -2117,7 +2118,7 @@ static void team_setup(struct net_device *dev) ...@@ -2117,7 +2118,7 @@ static void team_setup(struct net_device *dev)
NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_CTAG_RX |
NETIF_F_HW_VLAN_CTAG_FILTER; NETIF_F_HW_VLAN_CTAG_FILTER;
dev->hw_features |= NETIF_F_GSO_ENCAP_ALL; dev->hw_features |= NETIF_F_GSO_ENCAP_ALL | NETIF_F_GSO_UDP_L4;
dev->features |= dev->hw_features; dev->features |= dev->hw_features;
} }
......
...@@ -220,7 +220,6 @@ enum { ...@@ -220,7 +220,6 @@ enum {
NETIF_F_GSO_GRE_CSUM | \ NETIF_F_GSO_GRE_CSUM | \
NETIF_F_GSO_IPXIP4 | \ NETIF_F_GSO_IPXIP4 | \
NETIF_F_GSO_IPXIP6 | \ NETIF_F_GSO_IPXIP6 | \
NETIF_F_GSO_UDP_L4 | \
NETIF_F_GSO_UDP_TUNNEL | \ NETIF_F_GSO_UDP_TUNNEL | \
NETIF_F_GSO_UDP_TUNNEL_CSUM) NETIF_F_GSO_UDP_TUNNEL_CSUM)
......
...@@ -788,7 +788,8 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4, ...@@ -788,7 +788,8 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4,
return -EINVAL; return -EINVAL;
if (sk->sk_no_check_tx) if (sk->sk_no_check_tx)
return -EINVAL; return -EINVAL;
if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite) if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite ||
dst_xfrm(skb_dst(skb)))
return -EIO; return -EIO;
skb_shinfo(skb)->gso_size = cork->gso_size; skb_shinfo(skb)->gso_size = cork->gso_size;
......
...@@ -1053,7 +1053,8 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6, ...@@ -1053,7 +1053,8 @@ static int udp_v6_send_skb(struct sk_buff *skb, struct flowi6 *fl6,
return -EINVAL; return -EINVAL;
if (udp_sk(sk)->no_check6_tx) if (udp_sk(sk)->no_check6_tx)
return -EINVAL; return -EINVAL;
if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite) if (skb->ip_summed != CHECKSUM_PARTIAL || is_udplite ||
dst_xfrm(skb_dst(skb)))
return -EIO; return -EIO;
skb_shinfo(skb)->gso_size = cork->gso_size; skb_shinfo(skb)->gso_size = cork->gso_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment