diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-02 15:47:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-02 15:47:12 -0400 |
commit | bacd3add087770333bdce65cd3dd25e3b2cd67ac (patch) | |
tree | b9a5512a7abbf661020af87ee843e4ad711546ed /net/ipv6/xfrm6_input.c | |
parent | 29e350944fdc2dfca102500790d8ad6d6ff4f69d (diff) | |
parent | 9a1875e60e61b563737d8d1fc3876b279710fe93 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6:
[NET]: Fully fix the memory leaks in sys_accept().
[NETFILTER]: iptables 32bit compat layer
[NETFILTER]: {ip,nf}_conntrack_netlink: fix expectation notifier unregistration
[NETFILTER]: fix ifdef for connmark support in nf_conntrack_netlink
[NETFILTER]: x_tables: unify IPv4/IPv6 multiport match
[NETFILTER]: x_tables: unify IPv4/IPv6 esp match
[NET]: Fix dentry leak in sys_accept().
[IPSEC]: Kill unused decap state structure
[IPSEC]: Kill unused decap state argument
[NET]: com90xx kmalloc fix
[TG3]: Update driver version and reldate.
[TG3]: Revert "Speed up SRAM access"
Diffstat (limited to 'net/ipv6/xfrm6_input.c')
-rw-r--r-- | net/ipv6/xfrm6_input.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c index cccf8b76f046..00cfdee18dca 100644 --- a/net/ipv6/xfrm6_input.c +++ b/net/ipv6/xfrm6_input.c | |||
@@ -32,7 +32,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi) | |||
32 | { | 32 | { |
33 | int err; | 33 | int err; |
34 | u32 seq; | 34 | u32 seq; |
35 | struct sec_decap_state xfrm_vec[XFRM_MAX_DEPTH]; | 35 | struct xfrm_state *xfrm_vec[XFRM_MAX_DEPTH]; |
36 | struct xfrm_state *x; | 36 | struct xfrm_state *x; |
37 | int xfrm_nr = 0; | 37 | int xfrm_nr = 0; |
38 | int decaps = 0; | 38 | int decaps = 0; |
@@ -65,7 +65,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi) | |||
65 | if (xfrm_state_check_expire(x)) | 65 | if (xfrm_state_check_expire(x)) |
66 | goto drop_unlock; | 66 | goto drop_unlock; |
67 | 67 | ||
68 | nexthdr = x->type->input(x, &(xfrm_vec[xfrm_nr].decap), skb); | 68 | nexthdr = x->type->input(x, skb); |
69 | if (nexthdr <= 0) | 69 | if (nexthdr <= 0) |
70 | goto drop_unlock; | 70 | goto drop_unlock; |
71 | 71 | ||
@@ -79,7 +79,7 @@ int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi) | |||
79 | 79 | ||
80 | spin_unlock(&x->lock); | 80 | spin_unlock(&x->lock); |
81 | 81 | ||
82 | xfrm_vec[xfrm_nr++].xvec = x; | 82 | xfrm_vec[xfrm_nr++] = x; |
83 | 83 | ||
84 | if (x->props.mode) { /* XXX */ | 84 | if (x->props.mode) { /* XXX */ |
85 | if (nexthdr != IPPROTO_IPV6) | 85 | if (nexthdr != IPPROTO_IPV6) |
@@ -118,7 +118,8 @@ int xfrm6_rcv_spi(struct sk_buff *skb, u32 spi) | |||
118 | if (xfrm_nr + skb->sp->len > XFRM_MAX_DEPTH) | 118 | if (xfrm_nr + skb->sp->len > XFRM_MAX_DEPTH) |
119 | goto drop; | 119 | goto drop; |
120 | 120 | ||
121 | memcpy(skb->sp->x+skb->sp->len, xfrm_vec, xfrm_nr*sizeof(struct sec_decap_state)); | 121 | memcpy(skb->sp->xvec + skb->sp->len, xfrm_vec, |
122 | xfrm_nr * sizeof(xfrm_vec[0])); | ||
122 | skb->sp->len += xfrm_nr; | 123 | skb->sp->len += xfrm_nr; |
123 | skb->ip_summed = CHECKSUM_NONE; | 124 | skb->ip_summed = CHECKSUM_NONE; |
124 | 125 | ||
@@ -149,7 +150,7 @@ drop_unlock: | |||
149 | xfrm_state_put(x); | 150 | xfrm_state_put(x); |
150 | drop: | 151 | drop: |
151 | while (--xfrm_nr >= 0) | 152 | while (--xfrm_nr >= 0) |
152 | xfrm_state_put(xfrm_vec[xfrm_nr].xvec); | 153 | xfrm_state_put(xfrm_vec[xfrm_nr]); |
153 | kfree_skb(skb); | 154 | kfree_skb(skb); |
154 | return -1; | 155 | return -1; |
155 | } | 156 | } |