Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 71293
b: refs/heads/master
c: 1399637
h: refs/heads/master
i:
  71291: b0048e4
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Oct 18, 2007
1 parent c0bf834 commit 2551e13
Show file tree
Hide file tree
Showing 12 changed files with 29 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ca68145f16359f71cd62b2671aa3e8c58f45ef19
refs/heads/master: 13996378e6585fb25e582afe7489bf52dde78deb
3 changes: 2 additions & 1 deletion trunk/include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,8 @@ struct xfrm_state
/* Reference to data common to all the instances of this
* transformer. */
struct xfrm_type *type;
struct xfrm_mode *mode;
struct xfrm_mode *inner_mode;
struct xfrm_mode *outer_mode;

/* Security context */
struct xfrm_sec_ctx *security;
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/core/pktgen.c
Original file line number Diff line number Diff line change
Expand Up @@ -2454,7 +2454,7 @@ static int pktgen_output_ipsec(struct sk_buff *skb, struct pktgen_dev *pkt_dev)
spin_lock(&x->lock);
iph = ip_hdr(skb);

err = x->mode->output(x, skb);
err = x->outer_mode->output(x, skb);
if (err)
goto error;
err = x->type->output(x, skb);
Expand Down
4 changes: 2 additions & 2 deletions trunk/net/ipv4/xfrm4_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,10 @@ int xfrm4_rcv_encap(struct sk_buff *skb, int nexthdr, __be32 spi,

xfrm_vec[xfrm_nr++] = x;

if (x->mode->input(x, skb))
if (x->outer_mode->input(x, skb))
goto drop;

if (x->mode->flags & XFRM_MODE_FLAG_TUNNEL) {
if (x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) {
decaps = 1;
break;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/ipv4/xfrm4_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ static inline int xfrm4_output_one(struct sk_buff *skb)
struct iphdr *iph;
int err;

if (x->mode->flags & XFRM_MODE_FLAG_TUNNEL) {
if (x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) {
err = xfrm4_tunnel_check_size(skb);
if (err)
goto error_nolock;
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/ipv4/xfrm4_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ __xfrm4_bundle_create(struct xfrm_policy *policy, struct xfrm_state **xfrm, int
/* Copy neighbout for reachability confirmation */
dst_prev->neighbour = neigh_clone(rt->u.dst.neighbour);
dst_prev->input = rt->u.dst.input;
dst_prev->output = dst_prev->xfrm->mode->afinfo->output;
dst_prev->output = dst_prev->xfrm->outer_mode->afinfo->output;
if (rt0->peer)
atomic_inc(&rt0->peer->refcnt);
x->u.rt.peer = rt0->peer;
Expand Down
4 changes: 2 additions & 2 deletions trunk/net/ipv6/xfrm6_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi)

xfrm_vec[xfrm_nr++] = x;

if (x->mode->input(x, skb))
if (x->outer_mode->input(x, skb))
goto drop;

if (x->mode->flags & XFRM_MODE_FLAG_TUNNEL) {
if (x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) {
decaps = 1;
break;
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/ipv6/xfrm6_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ static inline int xfrm6_output_one(struct sk_buff *skb)
struct ipv6hdr *iph;
int err;

if (x->mode->flags & XFRM_MODE_FLAG_TUNNEL) {
if (x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) {
err = xfrm6_tunnel_check_size(skb);
if (err)
goto error_nolock;
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/ipv6/xfrm6_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ __xfrm6_bundle_create(struct xfrm_policy *policy, struct xfrm_state **xfrm, int
/* Copy neighbour for reachability confirmation */
dst_prev->neighbour = neigh_clone(rt->u.dst.neighbour);
dst_prev->input = rt->u.dst.input;
dst_prev->output = dst_prev->xfrm->mode->afinfo->output;
dst_prev->output = dst_prev->xfrm->outer_mode->afinfo->output;
/* Sheit... I remember I did this right. Apparently,
* it was magically lost, so this code needs audit */
x->u.rt6.rt6i_flags = rt0->rt6i_flags&(RTCF_BROADCAST|RTCF_MULTICAST|RTCF_LOCAL);
Expand Down
4 changes: 2 additions & 2 deletions trunk/net/xfrm/xfrm_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ int xfrm_output(struct sk_buff *skb)
xfrm_replay_notify(x, XFRM_REPLAY_UPDATE);
}

err = x->mode->output(x, skb);
err = x->outer_mode->output(x, skb);
if (err)
goto error;

Expand All @@ -82,7 +82,7 @@ int xfrm_output(struct sk_buff *skb)
}
dst = skb->dst;
x = dst->xfrm;
} while (x && !(x->mode->flags & XFRM_MODE_FLAG_TUNNEL));
} while (x && !(x->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL));

err = 0;

Expand Down
2 changes: 1 addition & 1 deletion trunk/net/xfrm/xfrm_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -1941,7 +1941,7 @@ int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *first,
return 0;

if (strict && fl &&
!(dst->xfrm->mode->flags & XFRM_MODE_FLAG_TUNNEL) &&
!(dst->xfrm->outer_mode->flags & XFRM_MODE_FLAG_TUNNEL) &&
!xfrm_state_addr_flow_check(dst->xfrm, fl, family))
return 0;

Expand Down
18 changes: 14 additions & 4 deletions trunk/net/xfrm/xfrm_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,8 +377,10 @@ static void xfrm_state_gc_destroy(struct xfrm_state *x)
kfree(x->calg);
kfree(x->encap);
kfree(x->coaddr);
if (x->mode)
xfrm_put_mode(x->mode);
if (x->inner_mode)
xfrm_put_mode(x->inner_mode);
if (x->outer_mode)
xfrm_put_mode(x->outer_mode);
if (x->type) {
x->type->destructor(x);
xfrm_put_type(x->type);
Expand Down Expand Up @@ -1947,6 +1949,14 @@ int xfrm_init_state(struct xfrm_state *x)
goto error;

err = -EPROTONOSUPPORT;
x->inner_mode = xfrm_get_mode(x->props.mode, x->sel.family);
if (x->inner_mode == NULL)
goto error;

if (!(x->inner_mode->flags & XFRM_MODE_FLAG_TUNNEL) &&
family != x->sel.family)
goto error;

x->type = xfrm_get_type(x->id.proto, family);
if (x->type == NULL)
goto error;
Expand All @@ -1955,8 +1965,8 @@ int xfrm_init_state(struct xfrm_state *x)
if (err)
goto error;

x->mode = xfrm_get_mode(x->props.mode, family);
if (x->mode == NULL)
x->outer_mode = xfrm_get_mode(x->props.mode, family);
if (x->outer_mode == NULL)
goto error;

x->km.state = XFRM_STATE_VALID;
Expand Down

0 comments on commit 2551e13

Please sign in to comment.