diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 627853572aba724ac61b04f01b5b168bc1555ec2..62d1900c36ada8f4899c90a4dfd9ea47f454d5c1 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3315,18 +3315,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; @@ -3361,7 +3361,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;