mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
af_packet: avoid erroring out after sock_init_data() in packet_create()
[ Upstream commit 46f2a11cb82b657fd15bab1c47821b635e03838b ] After sock_init_data() the allocated sk object is attached to the provided sock object. On error, packet_create() frees the sk object leaving the dangling pointer in the sock object on return. Some other code may try to use this pointer and cause use-after-free. Suggested-by: Eric Dumazet <[email protected]> Signed-off-by: Ignat Korchagin <[email protected]> Reviewed-by: Kuniyuki Iwashima <[email protected]> Reviewed-by: Willem de Bruijn <[email protected]> Reviewed-by: Eric Dumazet <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
This commit is contained in:
parent
4803d81373
commit
71b22837a5
1 changed files with 6 additions and 6 deletions
|
|
@ -3357,18 +3357,18 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
|
|||
if (sock->type == SOCK_PACKET)
|
||||
sock->ops = &packet_ops_spkt;
|
||||
|
||||
po = pkt_sk(sk);
|
||||
err = packet_alloc_pending(po);
|
||||
if (err)
|
||||
goto out_sk_free;
|
||||
|
||||
sock_init_data(sock, sk);
|
||||
|
||||
po = pkt_sk(sk);
|
||||
init_completion(&po->skb_completion);
|
||||
sk->sk_family = PF_PACKET;
|
||||
po->num = proto;
|
||||
po->xmit = dev_queue_xmit;
|
||||
|
||||
err = packet_alloc_pending(po);
|
||||
if (err)
|
||||
goto out2;
|
||||
|
||||
packet_cached_dev_reset(po);
|
||||
|
||||
sk->sk_destruct = packet_sock_destruct;
|
||||
|
|
@ -3403,7 +3403,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
|
|||
preempt_enable();
|
||||
|
||||
return 0;
|
||||
out2:
|
||||
out_sk_free:
|
||||
sk_free(sk);
|
||||
out:
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Reference in a new issue