mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-19 21:21:09 +00:00
vsock/virtio: free packets during the socket release
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>
This commit is contained in:
parent
532b0f7ece
commit
ac03046ece
1 changed files with 7 additions and 0 deletions
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue