diff options
Diffstat (limited to 'net/key/af_key.c')
-rw-r--r-- | net/key/af_key.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/net/key/af_key.c b/net/key/af_key.c index 859582275cab..d5e2121ea207 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c | |||
@@ -1454,21 +1454,23 @@ static int pfkey_delete(struct sock *sk, struct sk_buff *skb, struct sadb_msg *h | |||
1454 | if (x == NULL) | 1454 | if (x == NULL) |
1455 | return -ESRCH; | 1455 | return -ESRCH; |
1456 | 1456 | ||
1457 | if ((err = security_xfrm_state_delete(x))) | ||
1458 | goto out; | ||
1459 | |||
1457 | if (xfrm_state_kern(x)) { | 1460 | if (xfrm_state_kern(x)) { |
1458 | xfrm_state_put(x); | 1461 | err = -EPERM; |
1459 | return -EPERM; | 1462 | goto out; |
1460 | } | 1463 | } |
1461 | 1464 | ||
1462 | err = xfrm_state_delete(x); | 1465 | err = xfrm_state_delete(x); |
1463 | if (err < 0) { | 1466 | if (err < 0) |
1464 | xfrm_state_put(x); | 1467 | goto out; |
1465 | return err; | ||
1466 | } | ||
1467 | 1468 | ||
1468 | c.seq = hdr->sadb_msg_seq; | 1469 | c.seq = hdr->sadb_msg_seq; |
1469 | c.pid = hdr->sadb_msg_pid; | 1470 | c.pid = hdr->sadb_msg_pid; |
1470 | c.event = XFRM_MSG_DELSA; | 1471 | c.event = XFRM_MSG_DELSA; |
1471 | km_state_notify(x, &c); | 1472 | km_state_notify(x, &c); |
1473 | out: | ||
1472 | xfrm_state_put(x); | 1474 | xfrm_state_put(x); |
1473 | 1475 | ||
1474 | return err; | 1476 | return err; |
@@ -2274,11 +2276,14 @@ static int pfkey_spddelete(struct sock *sk, struct sk_buff *skb, struct sadb_msg | |||
2274 | 2276 | ||
2275 | err = 0; | 2277 | err = 0; |
2276 | 2278 | ||
2279 | if ((err = security_xfrm_policy_delete(xp))) | ||
2280 | goto out; | ||
2277 | c.seq = hdr->sadb_msg_seq; | 2281 | c.seq = hdr->sadb_msg_seq; |
2278 | c.pid = hdr->sadb_msg_pid; | 2282 | c.pid = hdr->sadb_msg_pid; |
2279 | c.event = XFRM_MSG_DELPOLICY; | 2283 | c.event = XFRM_MSG_DELPOLICY; |
2280 | km_policy_notify(xp, pol->sadb_x_policy_dir-1, &c); | 2284 | km_policy_notify(xp, pol->sadb_x_policy_dir-1, &c); |
2281 | 2285 | ||
2286 | out: | ||
2282 | xfrm_pol_put(xp); | 2287 | xfrm_pol_put(xp); |
2283 | return err; | 2288 | return err; |
2284 | } | 2289 | } |