Commit 1190cfdb authored by Jorgen Hansen's avatar Jorgen Hansen Committed by David S. Miller

VSOCK: Don't dec ack backlog twice for rejected connections

If a pending socket is marked as rejected, we will decrease the
sk_ack_backlog twice. So don't decrement it for rejected sockets
in vsock_pending_work().

Testing of the rejected socket path was done through code
modifications.
Reported-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarJorgen Hansen <jhansen@vmware.com>
Reviewed-by: default avatarAdit Ranadive <aditr@vmware.com>
Reviewed-by: default avatarAditya Sarwade <asarwade@vmware.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bf1a85a8
...@@ -465,6 +465,8 @@ void vsock_pending_work(struct work_struct *work) ...@@ -465,6 +465,8 @@ void vsock_pending_work(struct work_struct *work)
if (vsock_is_pending(sk)) { if (vsock_is_pending(sk)) {
vsock_remove_pending(listener, sk); vsock_remove_pending(listener, sk);
listener->sk_ack_backlog--;
} else if (!vsk->rejected) { } else if (!vsk->rejected) {
/* We are not on the pending list and accept() did not reject /* We are not on the pending list and accept() did not reject
* us, so we must have been accepted by our user process. We * us, so we must have been accepted by our user process. We
...@@ -475,8 +477,6 @@ void vsock_pending_work(struct work_struct *work) ...@@ -475,8 +477,6 @@ void vsock_pending_work(struct work_struct *work)
goto out; goto out;
} }
listener->sk_ack_backlog--;
/* We need to remove ourself from the global connected sockets list so /* We need to remove ourself from the global connected sockets list so
* incoming packets can't find this socket, and to reduce the reference * incoming packets can't find this socket, and to reduce the reference
* count. * count.
...@@ -2010,5 +2010,5 @@ EXPORT_SYMBOL_GPL(vsock_core_get_transport); ...@@ -2010,5 +2010,5 @@ EXPORT_SYMBOL_GPL(vsock_core_get_transport);
MODULE_AUTHOR("VMware, Inc."); MODULE_AUTHOR("VMware, Inc.");
MODULE_DESCRIPTION("VMware Virtual Socket Family"); MODULE_DESCRIPTION("VMware Virtual Socket Family");
MODULE_VERSION("1.0.1.0-k"); MODULE_VERSION("1.0.2.0-k");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment