]> err.no Git - linux-2.6/blobdiff - net/ipv4/esp4.c
Merge git://git.infradead.org/mtd-2.6
[linux-2.6] / net / ipv4 / esp4.c
index 8377bedf3f6654a1e45282083eff2a3818314228..cad4278025adc83b1b4430c949a3c65fa36f8f9c 100644 (file)
@@ -3,7 +3,7 @@
 #include <net/ip.h>
 #include <net/xfrm.h>
 #include <net/esp.h>
-#include <asm/scatterlist.h>
+#include <linux/scatterlist.h>
 #include <linux/crypto.h>
 #include <linux/kernel.h>
 #include <linux/pfkeyv2.h>
@@ -110,7 +110,10 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
                        if (!sg)
                                goto unlock;
                }
-               skb_to_sgvec(skb, sg, esph->enc_data+esp->conf.ivlen-skb->data, clen);
+               sg_init_table(sg, nfrags);
+               sg_mark_end(sg, skb_to_sgvec(skb, sg, esph->enc_data +
+                                                     esp->conf.ivlen -
+                                                     skb->data, clen));
                err = crypto_blkcipher_encrypt(&desc, sg, sg, clen);
                if (unlikely(sg != &esp->sgbuf[0]))
                        kfree(sg);
@@ -201,7 +204,9 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
                if (!sg)
                        goto out;
        }
-       skb_to_sgvec(skb, sg, sizeof(*esph) + esp->conf.ivlen, elen);
+       sg_init_table(sg, nfrags);
+       sg_mark_end(sg, skb_to_sgvec(skb, sg, sizeof(*esph) + esp->conf.ivlen,
+                                    elen));
        err = crypto_blkcipher_decrypt(&desc, sg, sg, elen);
        if (unlikely(sg != &esp->sgbuf[0]))
                kfree(sg);
@@ -257,12 +262,11 @@ static int esp_input(struct xfrm_state *x, struct sk_buff *skb)
                        skb->ip_summed = CHECKSUM_UNNECESSARY;
        }
 
-       iph->protocol = nexthdr[1];
        pskb_trim(skb, skb->len - alen - padlen - 2);
        __skb_pull(skb, sizeof(*esph) + esp->conf.ivlen);
        skb_set_transport_header(skb, -ihl);
 
-       return 0;
+       return nexthdr[1];
 
 out:
        return -EINVAL;