diff options
author | Mathias Krause <minipli@googlemail.com> | 2012-09-19 07:33:43 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-09-20 18:08:40 -0400 |
commit | e3ac104d41a97b42316915020ba228c505447d21 (patch) | |
tree | 70dbdb447f4bb01c2aac7240267a9844eab29e36 | |
parent | ecd7918745234e423dd87fcc0c077da557909720 (diff) |
xfrm_user: don't copy esn replay window twice for new states
The ESN replay window was already fully initialized in
xfrm_alloc_replay_state_esn(). No need to copy it again.
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/xfrm/xfrm_user.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index 5927065e97cf..289f4bf18ff0 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
@@ -461,10 +461,11 @@ static void copy_from_user_state(struct xfrm_state *x, struct xfrm_usersa_info * | |||
461 | * somehow made shareable and move it to xfrm_state.c - JHS | 461 | * somehow made shareable and move it to xfrm_state.c - JHS |
462 | * | 462 | * |
463 | */ | 463 | */ |
464 | static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs) | 464 | static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs, |
465 | int update_esn) | ||
465 | { | 466 | { |
466 | struct nlattr *rp = attrs[XFRMA_REPLAY_VAL]; | 467 | struct nlattr *rp = attrs[XFRMA_REPLAY_VAL]; |
467 | struct nlattr *re = attrs[XFRMA_REPLAY_ESN_VAL]; | 468 | struct nlattr *re = update_esn ? attrs[XFRMA_REPLAY_ESN_VAL] : NULL; |
468 | struct nlattr *lt = attrs[XFRMA_LTIME_VAL]; | 469 | struct nlattr *lt = attrs[XFRMA_LTIME_VAL]; |
469 | struct nlattr *et = attrs[XFRMA_ETIMER_THRESH]; | 470 | struct nlattr *et = attrs[XFRMA_ETIMER_THRESH]; |
470 | struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH]; | 471 | struct nlattr *rt = attrs[XFRMA_REPLAY_THRESH]; |
@@ -574,7 +575,7 @@ static struct xfrm_state *xfrm_state_construct(struct net *net, | |||
574 | goto error; | 575 | goto error; |
575 | 576 | ||
576 | /* override default values from above */ | 577 | /* override default values from above */ |
577 | xfrm_update_ae_params(x, attrs); | 578 | xfrm_update_ae_params(x, attrs, 0); |
578 | 579 | ||
579 | return x; | 580 | return x; |
580 | 581 | ||
@@ -1848,7 +1849,7 @@ static int xfrm_new_ae(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
1848 | goto out; | 1849 | goto out; |
1849 | 1850 | ||
1850 | spin_lock_bh(&x->lock); | 1851 | spin_lock_bh(&x->lock); |
1851 | xfrm_update_ae_params(x, attrs); | 1852 | xfrm_update_ae_params(x, attrs, 1); |
1852 | spin_unlock_bh(&x->lock); | 1853 | spin_unlock_bh(&x->lock); |
1853 | 1854 | ||
1854 | c.event = nlh->nlmsg_type; | 1855 | c.event = nlh->nlmsg_type; |