]> err.no Git - linux-2.6/blobdiff - net/ipv6/inet6_connection_sock.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / net / ipv6 / inet6_connection_sock.c
index 792f90f0f9ece287c0d94a2fbfdf7073c09e7aff..5c950cc79d80a3c04384b8238e2573e9f827fdb5 100644 (file)
@@ -13,7 +13,6 @@
  *             2 of the License, or(at your option) any later version.
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/in6.h>
 #include <linux/ipv6.h>
@@ -25,6 +24,7 @@
 #include <net/inet_hashtables.h>
 #include <net/ip6_route.h>
 #include <net/sock.h>
+#include <net/inet6_connection_sock.h>
 
 int inet6_csk_bind_conflict(const struct sock *sk,
                            const struct inet_bind_bucket *tb)
@@ -172,6 +172,7 @@ int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
 
                if (err) {
                        sk->sk_err_soft = -err;
+                       kfree_skb(skb);
                        return err;
                }
 
@@ -180,12 +181,11 @@ int inet6_csk_xmit(struct sk_buff *skb, int ipfragok)
 
                if ((err = xfrm_lookup(&dst, &fl, sk, 0)) < 0) {
                        sk->sk_route_caps = 0;
+                       kfree_skb(skb);
                        return err;
                }
 
                ip6_dst_store(sk, dst, NULL);
-               sk->sk_route_caps = dst->dev->features &
-                       ~(NETIF_F_IP_CSUM | NETIF_F_TSO);
        }
 
        skb->dst = dst_clone(dst);