Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 66961
b: refs/heads/master
c: 050f009
h: refs/heads/master
i:
  66959: a42b36a
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Oct 10, 2007
1 parent 12a8d04 commit d107656
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 17 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: 68325d3b12ad5bce650c2883bb878257f197efff
refs/heads/master: 050f009e16f908932070313c1745d09dc69fd62b
35 changes: 25 additions & 10 deletions trunk/net/key/af_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,8 @@ static inline int pfkey_mode_to_xfrm(int mode)
}
}

static struct sk_buff * pfkey_xfrm_state2msg(struct xfrm_state *x, int add_keys, int hsc)
static struct sk_buff *__pfkey_xfrm_state2msg(struct xfrm_state *x,
int add_keys, int hsc)
{
struct sk_buff *skb;
struct sadb_msg *hdr;
Expand Down Expand Up @@ -1009,6 +1010,24 @@ static struct sk_buff * pfkey_xfrm_state2msg(struct xfrm_state *x, int add_keys,
return skb;
}


static inline struct sk_buff *pfkey_xfrm_state2msg(struct xfrm_state *x)
{
struct sk_buff *skb;

spin_lock_bh(&x->lock);
skb = __pfkey_xfrm_state2msg(x, 1, 3);
spin_unlock_bh(&x->lock);

return skb;
}

static inline struct sk_buff *pfkey_xfrm_state2msg_expire(struct xfrm_state *x,
int hsc)
{
return __pfkey_xfrm_state2msg(x, 0, hsc);
}

static struct xfrm_state * pfkey_msg2xfrm_state(struct sadb_msg *hdr,
void **ext_hdrs)
{
Expand Down Expand Up @@ -1322,7 +1341,7 @@ static int pfkey_getspi(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h
}

err = xfrm_alloc_spi(x, min_spi, max_spi);
resp_skb = err ? ERR_PTR(err) : pfkey_xfrm_state2msg(x, 0, 3);
resp_skb = err ? ERR_PTR(err) : pfkey_xfrm_state2msg(x);

if (IS_ERR(resp_skb)) {
xfrm_state_put(x);
Expand Down Expand Up @@ -1412,12 +1431,8 @@ static int key_notify_sa(struct xfrm_state *x, struct km_event *c)
{
struct sk_buff *skb;
struct sadb_msg *hdr;
int hsc = 3;

if (c->event == XFRM_MSG_DELSA)
hsc = 0;

skb = pfkey_xfrm_state2msg(x, 0, hsc);
skb = pfkey_xfrm_state2msg(x);

if (IS_ERR(skb))
return PTR_ERR(skb);
Expand Down Expand Up @@ -1529,7 +1544,7 @@ static int pfkey_get(struct sock *sk, struct sk_buff *skb, struct sadb_msg *hdr,
if (x == NULL)
return -ESRCH;

out_skb = pfkey_xfrm_state2msg(x, 1, 3);
out_skb = pfkey_xfrm_state2msg(x);
proto = x->id.proto;
xfrm_state_put(x);
if (IS_ERR(out_skb))
Expand Down Expand Up @@ -1709,7 +1724,7 @@ static int dump_sa(struct xfrm_state *x, int count, void *ptr)
struct sk_buff *out_skb;
struct sadb_msg *out_hdr;

out_skb = pfkey_xfrm_state2msg(x, 1, 3);
out_skb = pfkey_xfrm_state2msg(x);
if (IS_ERR(out_skb))
return PTR_ERR(out_skb);

Expand Down Expand Up @@ -2910,7 +2925,7 @@ static int key_notify_sa_expire(struct xfrm_state *x, struct km_event *c)
else
hsc = 1;

out_skb = pfkey_xfrm_state2msg(x, 0, hsc);
out_skb = pfkey_xfrm_state2msg_expire(x, hsc);
if (IS_ERR(out_skb))
return PTR_ERR(out_skb);

Expand Down
14 changes: 8 additions & 6 deletions trunk/net/xfrm/xfrm_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -507,8 +507,16 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
struct xfrm_usersa_info *p,
struct sk_buff *skb)
{
spin_lock_bh(&x->lock);
copy_to_user_state(x, p);

if (x->coaddr)
NLA_PUT(skb, XFRMA_COADDR, sizeof(*x->coaddr), x->coaddr);

if (x->lastused)
NLA_PUT_U64(skb, XFRMA_LASTUSED, x->lastused);
spin_unlock_bh(&x->lock);

if (x->aalg)
NLA_PUT(skb, XFRMA_ALG_AUTH, alg_len(x->aalg), x->aalg);
if (x->ealg)
Expand All @@ -522,12 +530,6 @@ static int copy_to_user_state_extra(struct xfrm_state *x,
if (x->security && copy_sec_ctx(x->security, skb) < 0)
goto nla_put_failure;

if (x->coaddr)
NLA_PUT(skb, XFRMA_COADDR, sizeof(*x->coaddr), x->coaddr);

if (x->lastused)
NLA_PUT_U64(skb, XFRMA_LASTUSED, x->lastused);

return 0;

nla_put_failure:
Expand Down

0 comments on commit d107656

Please sign in to comment.