[AF_KEY]: Fix skb leak on pfkey_send_migrate() error
Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
421c991483
commit
d4782c323d
1 changed files with 9 additions and 7 deletions
|
@ -3593,27 +3593,29 @@ static int pfkey_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
|
||||||
/* old ipsecrequest */
|
/* old ipsecrequest */
|
||||||
int mode = pfkey_mode_from_xfrm(mp->mode);
|
int mode = pfkey_mode_from_xfrm(mp->mode);
|
||||||
if (mode < 0)
|
if (mode < 0)
|
||||||
return -EINVAL;
|
goto err;
|
||||||
if (set_ipsecrequest(skb, mp->proto, mode,
|
if (set_ipsecrequest(skb, mp->proto, mode,
|
||||||
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
|
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
|
||||||
mp->reqid, mp->old_family,
|
mp->reqid, mp->old_family,
|
||||||
&mp->old_saddr, &mp->old_daddr) < 0) {
|
&mp->old_saddr, &mp->old_daddr) < 0)
|
||||||
return -EINVAL;
|
goto err;
|
||||||
}
|
|
||||||
|
|
||||||
/* new ipsecrequest */
|
/* new ipsecrequest */
|
||||||
if (set_ipsecrequest(skb, mp->proto, mode,
|
if (set_ipsecrequest(skb, mp->proto, mode,
|
||||||
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
|
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
|
||||||
mp->reqid, mp->new_family,
|
mp->reqid, mp->new_family,
|
||||||
&mp->new_saddr, &mp->new_daddr) < 0) {
|
&mp->new_saddr, &mp->new_daddr) < 0)
|
||||||
return -EINVAL;
|
goto err;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* broadcast migrate message to sockets */
|
/* broadcast migrate message to sockets */
|
||||||
pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL);
|
pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err:
|
||||||
|
kfree_skb(skb);
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static int pfkey_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
|
static int pfkey_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
|
||||||
|
|
Loading…
Reference in a new issue