diff options
author | Patrick McHardy <kaber@trash.net> | 2005-04-21 23:12:32 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2005-04-21 23:12:32 -0400 |
commit | 5c5d281a93e9816966b6131ccec19519dab0e103 (patch) | |
tree | a897ec464a600d7a678052bfd5e52378470a45fe /net/xfrm/xfrm_state.c | |
parent | 7938109fff944e0117976a39946d99d2b0b0250d (diff) |
[XFRM]: Fix existence lookup in xfrm_state_find
Use 'daddr' instead of &tmpl->id.daddr, since the latter
might be zero. Also, only perform the lookup when
tmpl->id.spi is non-zero.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r-- | net/xfrm/xfrm_state.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 1db59f11f37d..d11747c2a763 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -357,8 +357,9 @@ xfrm_state_find(xfrm_address_t *daddr, xfrm_address_t *saddr, | |||
357 | 357 | ||
358 | x = best; | 358 | x = best; |
359 | if (!x && !error && !acquire_in_progress) { | 359 | if (!x && !error && !acquire_in_progress) { |
360 | x0 = afinfo->state_lookup(&tmpl->id.daddr, tmpl->id.spi, tmpl->id.proto); | 360 | if (tmpl->id.spi && |
361 | if (x0 != NULL) { | 361 | (x0 = afinfo->state_lookup(daddr, tmpl->id.spi, |
362 | tmpl->id.proto)) != NULL) { | ||
362 | xfrm_state_put(x0); | 363 | xfrm_state_put(x0); |
363 | error = -EEXIST; | 364 | error = -EEXIST; |
364 | goto out; | 365 | goto out; |