aboutsummaryrefslogtreecommitdiffstats
path: root/net/xfrm/xfrm_user.c
diff options
context:
space:
mode:
authorMathias Krause <minipli@googlemail.com>2012-09-19 07:33:43 -0400
committerDavid S. Miller <davem@davemloft.net>2012-09-20 18:08:40 -0400
commite3ac104d41a97b42316915020ba228c505447d21 (patch)
tree70dbdb447f4bb01c2aac7240267a9844eab29e36 /net/xfrm/xfrm_user.c
parentecd7918745234e423dd87fcc0c077da557909720 (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>
Diffstat (limited to 'net/xfrm/xfrm_user.c')
-rw-r--r--net/xfrm/xfrm_user.c9
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*/
464static void xfrm_update_ae_params(struct xfrm_state *x, struct nlattr **attrs) 464static 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;