Skip to content

Commit

Permalink
[AF_KEY]: Fix skb leak on pfkey_send_migrate() error
Browse files Browse the repository at this point in the history
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Jan 21, 2008
1 parent 421c991 commit d4782c3
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions net/key/af_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -3593,27 +3593,29 @@ static int pfkey_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
/* old ipsecrequest */
int mode = pfkey_mode_from_xfrm(mp->mode);
if (mode < 0)
return -EINVAL;
goto err;
if (set_ipsecrequest(skb, mp->proto, mode,
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
mp->reqid, mp->old_family,
&mp->old_saddr, &mp->old_daddr) < 0) {
return -EINVAL;
}
&mp->old_saddr, &mp->old_daddr) < 0)
goto err;

/* new ipsecrequest */
if (set_ipsecrequest(skb, mp->proto, mode,
(mp->reqid ? IPSEC_LEVEL_UNIQUE : IPSEC_LEVEL_REQUIRE),
mp->reqid, mp->new_family,
&mp->new_saddr, &mp->new_daddr) < 0) {
return -EINVAL;
}
&mp->new_saddr, &mp->new_daddr) < 0)
goto err;
}

/* broadcast migrate message to sockets */
pfkey_broadcast(skb, GFP_ATOMIC, BROADCAST_ALL, NULL);

return 0;

err:
kfree_skb(skb);
return -EINVAL;
}
#else
static int pfkey_send_migrate(struct xfrm_selector *sel, u8 dir, u8 type,
Expand Down

0 comments on commit d4782c3

Please sign in to comment.