NFC: rawsock: Fix a memory leak
In the rawsock data exchange callback, the sk_buff is not freed on error. Signed-off-by: Thierry Escande <thierry.escande@linux.intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
e44666b981
commit
4cf7e03296
|
@ -142,11 +142,11 @@ static void rawsock_data_exchange_complete(void *context, struct sk_buff *skb,
|
||||||
|
|
||||||
err = rawsock_add_header(skb);
|
err = rawsock_add_header(skb);
|
||||||
if (err)
|
if (err)
|
||||||
goto error;
|
goto error_skb;
|
||||||
|
|
||||||
err = sock_queue_rcv_skb(sk, skb);
|
err = sock_queue_rcv_skb(sk, skb);
|
||||||
if (err)
|
if (err)
|
||||||
goto error;
|
goto error_skb;
|
||||||
|
|
||||||
spin_lock_bh(&sk->sk_write_queue.lock);
|
spin_lock_bh(&sk->sk_write_queue.lock);
|
||||||
if (!skb_queue_empty(&sk->sk_write_queue))
|
if (!skb_queue_empty(&sk->sk_write_queue))
|
||||||
|
@ -158,6 +158,9 @@ static void rawsock_data_exchange_complete(void *context, struct sk_buff *skb,
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
error_skb:
|
||||||
|
kfree_skb(skb);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
rawsock_report_error(sk, err);
|
rawsock_report_error(sk, err);
|
||||||
sock_put(sk);
|
sock_put(sk);
|
||||||
|
|
Loading…
Reference in New Issue