aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorBudimir Markovic <markovicbudimir@gmail.com>2025-08-07 04:18:11 +0000
committerJakub Kicinski <kuba@kernel.org>2025-08-08 12:55:00 -0700
commitaba0c94f61ec05315fa7815d21aefa4c87f6a9f4 (patch)
tree76de9ac72880d01c4f0746117a73157a216705ab
parentnet: ti: icss-iep: Fix incorrect type for return value in extts_enable() (diff)
downloadwireguard-linux-aba0c94f61ec05315fa7815d21aefa4c87f6a9f4.tar.xz
wireguard-linux-aba0c94f61ec05315fa7815d21aefa4c87f6a9f4.zip
vsock: Do not allow binding to VMADDR_PORT_ANY
It is possible for a vsock to autobind to VMADDR_PORT_ANY. This can cause a use-after-free when a connection is made to the bound socket. The socket returned by accept() also has port VMADDR_PORT_ANY but is not on the list of unbound sockets. Binding it will result in an extra refcount decrement similar to the one fixed in fcdd2242c023 (vsock: Keep the binding until socket destruction). Modify the check in __vsock_bind_connectible() to also prevent binding to VMADDR_PORT_ANY. Fixes: d021c344051a ("VSOCK: Introduce VM Sockets") Reported-by: Budimir Markovic <markovicbudimir@gmail.com> Signed-off-by: Budimir Markovic <markovicbudimir@gmail.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Link: https://patch.msgid.link/20250807041811.678-1-markovicbudimir@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r--net/vmw_vsock/af_vsock.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index ead6a3c14b87..bebb355f3ffe 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -689,7 +689,8 @@ static int __vsock_bind_connectible(struct vsock_sock *vsk,
unsigned int i;
for (i = 0; i < MAX_PORT_RETRIES; i++) {
- if (port <= LAST_RESERVED_PORT)
+ if (port == VMADDR_PORT_ANY ||
+ port <= LAST_RESERVED_PORT)
port = LAST_RESERVED_PORT + 1;
new_addr.svm_port = port++;