mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-11-13 07:12:47 +00:00
I must have missed the update earlier this week Signed-off-by: Rolf Neugebauer <rolf.neugebauer@docker.com>
55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
From 79c085082e09aaa7a8761af73a20612327447c7c Mon Sep 17 00:00:00 2001
|
|
From: Dexuan Cui <decui@microsoft.com>
|
|
Date: Wed, 26 Jul 2017 12:32:06 -0600
|
|
Subject: [PATCH 08/15] vsock: fix vsock_dequeue/enqueue_accept race
|
|
|
|
We should add a lock to protect the concurrent access to the list.
|
|
|
|
Signed-off-by: Dexuan Cui <decui@microsoft.com>
|
|
Cc: K. Y. Srinivasan <kys@microsoft.com>
|
|
Cc: Haiyang Zhang <haiyangz@microsoft.com>
|
|
Cc: Stephen Hemminger <sthemmin@microsoft.com>
|
|
Origin: git@github.com:dcui/linux.git
|
|
(cherry picked from commit 719999b4908874178002a7a4850396e111780f59)
|
|
---
|
|
net/vmw_vsock/af_vsock.c | 7 +++++++
|
|
1 file changed, 7 insertions(+)
|
|
|
|
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
|
|
index dfc8c51e4d74..b7b2c66d91fd 100644
|
|
--- a/net/vmw_vsock/af_vsock.c
|
|
+++ b/net/vmw_vsock/af_vsock.c
|
|
@@ -126,6 +126,7 @@ static struct proto vsock_proto = {
|
|
|
|
static const struct vsock_transport *transport;
|
|
static DEFINE_MUTEX(vsock_register_mutex);
|
|
+static DEFINE_SPINLOCK(vsock_accept_queue_lock);
|
|
|
|
/**** EXPORTS ****/
|
|
|
|
@@ -406,7 +407,10 @@ void vsock_enqueue_accept(struct sock *listener, struct sock *connected)
|
|
|
|
sock_hold(connected);
|
|
sock_hold(listener);
|
|
+
|
|
+ spin_lock(&vsock_accept_queue_lock);
|
|
list_add_tail(&vconnected->accept_queue, &vlistener->accept_queue);
|
|
+ spin_unlock(&vsock_accept_queue_lock);
|
|
}
|
|
EXPORT_SYMBOL_GPL(vsock_enqueue_accept);
|
|
|
|
@@ -423,7 +427,10 @@ static struct sock *vsock_dequeue_accept(struct sock *listener)
|
|
vconnected = list_entry(vlistener->accept_queue.next,
|
|
struct vsock_sock, accept_queue);
|
|
|
|
+ spin_lock(&vsock_accept_queue_lock);
|
|
list_del_init(&vconnected->accept_queue);
|
|
+ spin_unlock(&vsock_accept_queue_lock);
|
|
+
|
|
sock_put(listener);
|
|
/* The caller will need a reference on the connected socket so we let
|
|
* it call sock_put().
|
|
--
|
|
2.14.1
|
|
|