Skip to content

Commit

Permalink
[IPSEC] Fix xfrm to pfkey SA state conversion
Browse files Browse the repository at this point in the history
This patch adjusts the SA state conversion in af_key such that
XFRM_STATE_ERROR/XFRM_STATE_DEAD will be converted to SADB_STATE_DEAD
instead of SADB_STATE_DYING.

According to RFC 2367, SADB_STATE_DYING SAs can be turned into
mature ones through updating their lifetime settings.  Since SAs
which are in the states XFRM_STATE_ERROR/XFRM_STATE_DEAD cannot
be resurrected, this value is unsuitable.

Signed-off-by: Herbert Xu <[email protected]>
  • Loading branch information
herbertx authored and davem330 committed Jun 19, 2005
1 parent 4666faa commit 4f09f0b
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions net/key/af_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -656,13 +656,18 @@ static struct sk_buff * pfkey_xfrm_state2msg(struct xfrm_state *x, int add_keys,
sa->sadb_sa_exttype = SADB_EXT_SA;
sa->sadb_sa_spi = x->id.spi;
sa->sadb_sa_replay = x->props.replay_window;
sa->sadb_sa_state = SADB_SASTATE_DYING;
if (x->km.state == XFRM_STATE_VALID && !x->km.dying)
sa->sadb_sa_state = SADB_SASTATE_MATURE;
else if (x->km.state == XFRM_STATE_ACQ)
switch (x->km.state) {
case XFRM_STATE_VALID:
sa->sadb_sa_state = x->km.dying ?
SADB_SASTATE_DYING : SADB_SASTATE_MATURE;
break;
case XFRM_STATE_ACQ:
sa->sadb_sa_state = SADB_SASTATE_LARVAL;
else if (x->km.state == XFRM_STATE_EXPIRED)
break;
default:
sa->sadb_sa_state = SADB_SASTATE_DEAD;
break;
}
sa->sadb_sa_auth = 0;
if (x->aalg) {
struct xfrm_algo_desc *a = xfrm_aalg_get_byname(x->aalg->alg_name, 0);
Expand Down

0 comments on commit 4f09f0b

Please sign in to comment.