VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / net / ipv6 / xfrm6_input.c
index c679a3c..0791594 100644 (file)
@@ -34,12 +34,11 @@ int xfrm6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
        struct xfrm_state *x;
        int xfrm_nr = 0;
        int decaps = 0;
-       int nexthdr = 0;
-       u8 *prevhdr = NULL;
+       int nexthdr;
+       unsigned int nhoff;
 
-       ip6_find_1stfragopt(skb, &prevhdr);
-       nexthdr = *prevhdr;
-       *nhoffp = prevhdr - skb->nh.raw;
+       nhoff = *nhoffp;
+       nexthdr = skb->nh.raw[nhoff];
 
        if ((err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0)
                goto drop;
@@ -67,6 +66,8 @@ int xfrm6_rcv(struct sk_buff **pskb, unsigned int *nhoffp)
                if (nexthdr <= 0)
                        goto drop_unlock;
 
+               skb->nh.raw[nhoff] = nexthdr;
+
                if (x->props.replay_window)
                        xfrm_replay_advance(x, seq);