Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.25-rc7 /net/ipv4/ah4.c

Filename:/net/ipv4/ah4.c
Lines Added:13
Lines Deleted:8
Also changed in: (Previous) 2.6.25-rc6  2.6.25-rc5  2.6.25-rc4  2.6.25-rc3  2.6.25-rc2  2.6.25-rc1 
(Following) 2.6.25-rc8  2.6.25-rc9  2.6.25 

Location
[  2.6.25-rc7
  [  net
    [  ipv4
       o  ah4.c

Patch

diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c
index 5fc346d..8219b7e 100644
--- a/net/ipv4/ah4.c
+++ b/net/ipv4/ah4.c
@@ -96,7 +96,7 @@ static int ah_output(struct xfrm_state *x, struct sk_buff *skb)
 
    ah->reserved = 0;
    ah->spi = x->id.spi;
-   ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq);
+   ah->seq_no = htonl(XFRM_SKB_CB(skb)->seq.output);
 
    spin_lock_bh(&x->lock);
    err = ah_mac_digest(ahp, skb, ah->auth_data);
@@ -169,6 +169,8 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
       if (ip_clear_mutable_options(iph, &dummy))
          goto out;
    }
+
+   spin_lock(&x->lock);
    {
       u8 auth_data[MAX_AH_AUTH_LEN];
 
@@ -176,13 +178,16 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
       skb_push(skb, ihl);
       err = ah_mac_digest(ahp, skb, ah->auth_data);
       if (err)
-         goto out;
-      err = -EINVAL;
-      if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len)) {
-         x->stats.integrity_failed++;
-         goto out;
-      }
+         goto unlock;
+      if (memcmp(ahp->work_icv, auth_data, ahp->icv_trunc_len))
+         err = -EBADMSG;
    }
+unlock:
+   spin_unlock(&x->lock);
+
+   if (err)
+      goto out;
+
    skb->network_header += ah_hlen;
    memcpy(skb_network_header(skb), work_buf, ihl);
    skb->transport_header = skb->network_header;
@@ -295,7 +300,7 @@ static void ah_destroy(struct xfrm_state *x)
 }
 
 
-static struct xfrm_type ah_type =
+static const struct xfrm_type ah_type =
 {
    .description   = "AH4",
    .owner      = THIS_MODULE,


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.