]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
socket-util: filter out VMADDR_CID_ANY in vsock_get_local_cid() 41230/head
authorNick Rosbrook <enr0n@ubuntu.com>
Fri, 20 Mar 2026 15:23:39 +0000 (11:23 -0400)
committerNick Rosbrook <enr0n@ubuntu.com>
Fri, 20 Mar 2026 15:37:31 +0000 (11:37 -0400)
It has been observed on some systems[1] that ssh-issue may print out:

 Try contacting this VM's SSH server via 'ssh vsock%4294967295' from host.

i.e. it suggests connecting with VMADDR_CID_ANY, which is not valid. It
seems that IOCTL_VM_SOCKETS_GET_LOCAL_CID may return VMADDR_CID_ANY in
some cases, e.g. when vsock is not full initialized or so.

Treat VMADDR_CID_ANY as special in vsock_get_local_cid(), the same as
VMADDR_CID_LOCAL and VMADDR_CID_HOST, and return an error.

[1] https://launchpad.net/bugs/2145027

src/basic/socket-util.c

index 159486f7f1e52facd0d51b61c9155b8d4cd12e89..eab09786b67faf87b8849b7a30f7366043482f7a 100644 (file)
@@ -1794,7 +1794,7 @@ int vsock_get_local_cid(unsigned *ret) {
         /* If ret == NULL, we're just want to check if AF_VSOCK is available, so accept
          * any address. Otherwise, filter out special addresses that are cannot be used
          * to identify _this_ machine from the outside. */
-        if (ret && IN_SET(tmp, VMADDR_CID_LOCAL, VMADDR_CID_HOST))
+        if (ret && IN_SET(tmp, VMADDR_CID_LOCAL, VMADDR_CID_HOST, VMADDR_CID_ANY))
                 return log_debug_errno(SYNTHETIC_ERRNO(EADDRNOTAVAIL),
                                        "IOCTL_VM_SOCKETS_GET_LOCAL_CID returned special value (%u), ignoring.", tmp);