ipv4: Don't use ufo handling on later transformed packets
authorSteffen Klassert <steffen.klassert@secunet.com>
Wed, 29 Jun 2011 23:19:32 +0000 (23:19 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 2 Jul 2011 00:33:19 +0000 (17:33 -0700)
We might call ip_ufo_append_data() for packets that will be IPsec
transformed later. This function should be used just for real
udp packets. So we check for rt->dst.header_len which is only
nonzero on IPsec handling and call ip_ufo_append_data() just
if rt->dst.header_len is zero.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_output.c

index 4a7e16b5d3f34b53b3470711a779972d9195dc94..84f26e8e6c6075a53806f7392eff87782df42151 100644 (file)
@@ -828,7 +828,7 @@ static int __ip_append_data(struct sock *sk,
        cork->length += length;
        if (((length > mtu) || (skb && skb_is_gso(skb))) &&
            (sk->sk_protocol == IPPROTO_UDP) &&
-           (rt->dst.dev->features & NETIF_F_UFO)) {
+           (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len) {
                err = ip_ufo_append_data(sk, queue, getfrag, from, length,
                                         hh_len, fragheaderlen, transhdrlen,
                                         mtu, flags);