vsock/virtio: free packets during the socket release
[ Upstream commit ac03046ece
]
When the socket is released, we should free all packets
queued in the per-socket list in order to avoid a memory
leak.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
af4af68df3
commit
4e539fa2de
@ -786,12 +786,19 @@ static bool virtio_transport_close(struct vsock_sock *vsk)
|
|||||||
|
|
||||||
void virtio_transport_release(struct vsock_sock *vsk)
|
void virtio_transport_release(struct vsock_sock *vsk)
|
||||||
{
|
{
|
||||||
|
struct virtio_vsock_sock *vvs = vsk->trans;
|
||||||
|
struct virtio_vsock_pkt *pkt, *tmp;
|
||||||
struct sock *sk = &vsk->sk;
|
struct sock *sk = &vsk->sk;
|
||||||
bool remove_sock = true;
|
bool remove_sock = true;
|
||||||
|
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
if (sk->sk_type == SOCK_STREAM)
|
if (sk->sk_type == SOCK_STREAM)
|
||||||
remove_sock = virtio_transport_close(vsk);
|
remove_sock = virtio_transport_close(vsk);
|
||||||
|
|
||||||
|
list_for_each_entry_safe(pkt, tmp, &vvs->rx_queue, list) {
|
||||||
|
list_del(&pkt->list);
|
||||||
|
virtio_transport_free_pkt(pkt);
|
||||||
|
}
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
|
|
||||||
if (remove_sock)
|
if (remove_sock)
|
||||||
|
Reference in New Issue
Block a user