All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dexuan Cui <decui@microsoft.com>
To: sgarzare@redhat.com, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, arseny.krasnov@kaspersky.com,
	netdev@vger.kernel.org
Cc: virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, kys@microsoft.com,
	haiyangz@microsoft.com, stephen@networkplumber.org,
	wei.liu@kernel.org, linux-hyperv@vger.kernel.org,
	Dexuan Cui <decui@microsoft.com>
Subject: [PATCH v2 2/2] vsock: fix possible infinite sleep in vsock_connectible_wait_data()
Date: Mon, 31 Oct 2022 19:17:06 -0700	[thread overview]
Message-ID: <20221101021706.26152-3-decui@microsoft.com> (raw)
In-Reply-To: <20221101021706.26152-1-decui@microsoft.com>

Currently vsock_connectible_has_data() may miss a wakeup operation
between vsock_connectible_has_data() == 0 and the prepare_to_wait().

Fix the race by adding the process to the wait queue before checking
vsock_connectible_has_data().

Fixes: b3f7fd54881b ("af_vsock: separate wait data loop")
Signed-off-by: Dexuan Cui <decui@microsoft.com>
---

Changes in v2 (Thanks Stefano!):
  Fixed a typo in the commit message.
  Removed the unnecessary finish_wait() at the end of the loop.

 net/vmw_vsock/af_vsock.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index d258fd43092e..884eca7f6743 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -1905,8 +1905,11 @@ static int vsock_connectible_wait_data(struct sock *sk,
 	err = 0;
 	transport = vsk->transport;
 
-	while ((data = vsock_connectible_has_data(vsk)) == 0) {
+	while (1) {
 		prepare_to_wait(sk_sleep(sk), wait, TASK_INTERRUPTIBLE);
+		data = vsock_connectible_has_data(vsk);
+		if (data != 0)
+			break;
 
 		if (sk->sk_err != 0 ||
 		    (sk->sk_shutdown & RCV_SHUTDOWN) ||
-- 
2.25.1


  parent reply	other threads:[~2022-11-01  2:17 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-01  2:17 [PATCH v2 0/2] vsock: remove an unused variable and fix infinite sleep Dexuan Cui
2022-11-01  2:17 ` [PATCH v2 1/2] vsock: remove the unused 'wait' in vsock_connectible_recvmsg() Dexuan Cui
2022-11-01  2:17 ` Dexuan Cui [this message]
2022-11-02  9:31   ` [PATCH v2 2/2] vsock: fix possible infinite sleep in vsock_connectible_wait_data() Stefano Garzarella
2022-11-02  9:31     ` Stefano Garzarella
2022-11-02  9:42     ` Stefano Garzarella
2022-11-02  9:42       ` Stefano Garzarella
2022-11-02 13:30       ` Frederic Dalleau
2022-11-02 13:30         ` Frederic Dalleau via Virtualization
2022-11-02 17:30         ` Dexuan Cui
2022-11-03 10:00 ` [PATCH v2 0/2] vsock: remove an unused variable and fix infinite sleep patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221101021706.26152-3-decui@microsoft.com \
    --to=decui@microsoft.com \
    --cc=arseny.krasnov@kaspersky.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=haiyangz@microsoft.com \
    --cc=kuba@kernel.org \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sgarzare@redhat.com \
    --cc=stephen@networkplumber.org \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=wei.liu@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.