diff options
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/af_inet.c | 3 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 2 | ||||
-rw-r--r-- | net/ipv4/netfilter/nf_nat_helper.c | 4 |
3 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 041fba3fa0aa..06c08e5740fb 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -1170,6 +1170,9 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | |||
1170 | int ihl; | 1170 | int ihl; |
1171 | int id; | 1171 | int id; |
1172 | 1172 | ||
1173 | if (!(features & NETIF_F_V4_CSUM)) | ||
1174 | features &= ~NETIF_F_SG; | ||
1175 | |||
1173 | if (unlikely(skb_shinfo(skb)->gso_type & | 1176 | if (unlikely(skb_shinfo(skb)->gso_type & |
1174 | ~(SKB_GSO_TCPV4 | | 1177 | ~(SKB_GSO_TCPV4 | |
1175 | SKB_GSO_UDP | | 1178 | SKB_GSO_UDP | |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 34ea4547ebbe..a7dd343d3a03 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -837,7 +837,7 @@ int ip_append_data(struct sock *sk, | |||
837 | */ | 837 | */ |
838 | if (transhdrlen && | 838 | if (transhdrlen && |
839 | length + fragheaderlen <= mtu && | 839 | length + fragheaderlen <= mtu && |
840 | rt->u.dst.dev->features & NETIF_F_ALL_CSUM && | 840 | rt->u.dst.dev->features & NETIF_F_V4_CSUM && |
841 | !exthdrlen) | 841 | !exthdrlen) |
842 | csummode = CHECKSUM_PARTIAL; | 842 | csummode = CHECKSUM_PARTIAL; |
843 | 843 | ||
diff --git a/net/ipv4/netfilter/nf_nat_helper.c b/net/ipv4/netfilter/nf_nat_helper.c index 15b6e5ce3a04..b1aa5983a95b 100644 --- a/net/ipv4/netfilter/nf_nat_helper.c +++ b/net/ipv4/netfilter/nf_nat_helper.c | |||
@@ -178,7 +178,7 @@ nf_nat_mangle_tcp_packet(struct sk_buff **pskb, | |||
178 | datalen = (*pskb)->len - iph->ihl*4; | 178 | datalen = (*pskb)->len - iph->ihl*4; |
179 | if ((*pskb)->ip_summed != CHECKSUM_PARTIAL) { | 179 | if ((*pskb)->ip_summed != CHECKSUM_PARTIAL) { |
180 | if (!(rt->rt_flags & RTCF_LOCAL) && | 180 | if (!(rt->rt_flags & RTCF_LOCAL) && |
181 | (*pskb)->dev->features & NETIF_F_ALL_CSUM) { | 181 | (*pskb)->dev->features & NETIF_F_V4_CSUM) { |
182 | (*pskb)->ip_summed = CHECKSUM_PARTIAL; | 182 | (*pskb)->ip_summed = CHECKSUM_PARTIAL; |
183 | (*pskb)->csum_start = skb_headroom(*pskb) + | 183 | (*pskb)->csum_start = skb_headroom(*pskb) + |
184 | skb_network_offset(*pskb) + | 184 | skb_network_offset(*pskb) + |
@@ -265,7 +265,7 @@ nf_nat_mangle_udp_packet(struct sk_buff **pskb, | |||
265 | 265 | ||
266 | if ((*pskb)->ip_summed != CHECKSUM_PARTIAL) { | 266 | if ((*pskb)->ip_summed != CHECKSUM_PARTIAL) { |
267 | if (!(rt->rt_flags & RTCF_LOCAL) && | 267 | if (!(rt->rt_flags & RTCF_LOCAL) && |
268 | (*pskb)->dev->features & NETIF_F_ALL_CSUM) { | 268 | (*pskb)->dev->features & NETIF_F_V4_CSUM) { |
269 | (*pskb)->ip_summed = CHECKSUM_PARTIAL; | 269 | (*pskb)->ip_summed = CHECKSUM_PARTIAL; |
270 | (*pskb)->csum_start = skb_headroom(*pskb) + | 270 | (*pskb)->csum_start = skb_headroom(*pskb) + |
271 | skb_network_offset(*pskb) + | 271 | skb_network_offset(*pskb) + |