]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/xfrm4_input.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6-omap-h63xx.git] / net / ipv4 / xfrm4_input.c
index 2fa108245413d38bd7c88fac7c71e570e98e40b9..e9bbfde19ac32420a6dfd77b090e8b22fd97edc6 100644 (file)
@@ -54,12 +54,14 @@ static int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
        int xfrm_nr = 0;
        int decaps = 0;
        int err = xfrm4_parse_spi(skb, ip_hdr(skb)->protocol, &spi, &seq);
+       unsigned int nhoff = offsetof(struct iphdr, protocol);
 
        if (err != 0)
                goto drop;
 
        do {
                const struct iphdr *iph = ip_hdr(skb);
+               int nexthdr;
 
                if (xfrm_nr == XFRM_MAX_DEPTH)
                        goto drop;
@@ -82,9 +84,12 @@ static int xfrm4_rcv_encap(struct sk_buff *skb, __u16 encap_type)
                if (xfrm_state_check_expire(x))
                        goto drop_unlock;
 
-               if (x->type->input(x, skb))
+               nexthdr = x->type->input(x, skb);
+               if (nexthdr <= 0)
                        goto drop_unlock;
 
+               skb_network_header(skb)[nhoff] = nexthdr;
+
                /* only the first xfrm gets the encap type */
                encap_type = 0;