Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 783e3988 authored by Jason Wang's avatar Jason Wang Committed by Michael S. Tsirkin
Browse files

vhost: lock receive queue, not the socket



vhost takes a sock lock to try and prevent
the skb from being pulled from the receive queue
after skb_peek.  However this is not the right lock to use for that,
sk_receive_queue.lock is. Fix that up.

Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 94249369
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -213,12 +213,13 @@ static int peek_head_len(struct sock *sk)
{
	struct sk_buff *head;
	int len = 0;
	unsigned long flags;

	lock_sock(sk);
	spin_lock_irqsave(&sk->sk_receive_queue.lock, flags);
	head = skb_peek(&sk->sk_receive_queue);
	if (head)
	if (likely(head))
		len = head->len;
	release_sock(sk);
	spin_unlock_irqrestore(&sk->sk_receive_queue.lock, flags);
	return len;
}