SUNRPC: Fix xs_setup_bc_tcp()
[safe/jmp/linux-2.6] / net / ipv4 / ip_input.c
index 490ce20..f8ab7a3 100644 (file)
 #include <linux/kernel.h>
 #include <linux/string.h>
 #include <linux/errno.h>
+#include <linux/slab.h>
 
 #include <linux/net.h>
 #include <linux/socket.h>
@@ -161,10 +162,10 @@ int ip_call_ra_chain(struct sk_buff *skb)
                /* If socket is bound to an interface, only report
                 * the packet if it came  from that interface.
                 */
-               if (sk && inet_sk(sk)->num == protocol &&
+               if (sk && inet_sk(sk)->inet_num == protocol &&
                    (!sk->sk_bound_dev_if ||
                     sk->sk_bound_dev_if == dev->ifindex) &&
-                   sock_net(sk) == dev_net(dev)) {
+                   net_eq(sock_net(sk), dev_net(dev))) {
                        if (ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)) {
                                if (ip_defrag(skb, IP_DEFRAG_CALL_RA_CHAIN)) {
                                        read_unlock(&ip_ra_lock);
@@ -202,7 +203,7 @@ static int ip_local_deliver_finish(struct sk_buff *skb)
        {
                int protocol = ip_hdr(skb)->protocol;
                int hash, raw;
-               struct net_protocol *ipprot;
+               const struct net_protocol *ipprot;
 
        resubmit:
                raw = raw_local_deliver(skb, protocol);
@@ -440,6 +441,9 @@ int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt,
        /* Remove any debris in the socket control block */
        memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
 
+       /* Must drop socket now because of tproxy. */
+       skb_orphan(skb);
+
        return NF_HOOK(PF_INET, NF_INET_PRE_ROUTING, skb, dev, NULL,
                       ip_rcv_finish);