Merge pull request #33325 from poettering/vsock-ret-optional

socket-util: make return parameter for socket_address_parse_vsock() o…
This commit is contained in:
Luca Boccassi
2024-06-15 00:45:28 +01:00
committed by GitHub
2 changed files with 8 additions and 3 deletions

View File

@@ -1757,13 +1757,12 @@ int socket_address_parse_vsock(SocketAddress *ret_address, const char *s) {
int vsock_get_local_cid(unsigned *ret) {
_cleanup_close_ int vsock_fd = -EBADF;
assert(ret);
vsock_fd = open("/dev/vsock", O_RDONLY|O_CLOEXEC);
if (vsock_fd < 0)
return log_debug_errno(errno, "Failed to open /dev/vsock: %m");
if (ioctl(vsock_fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, ret) < 0)
unsigned tmp;
if (ioctl(vsock_fd, IOCTL_VM_SOCKETS_GET_LOCAL_CID, ret ?: &tmp) < 0)
return log_debug_errno(errno, "Failed to query local AF_VSOCK CID: %m");
return 0;

View File

@@ -26,6 +26,7 @@
#include "process-util.h"
#include "service-util.h"
#include "signal-util.h"
#include "socket-util.h"
#include "special.h"
static Manager* manager_unref(Manager *m);
@@ -143,6 +144,11 @@ static int manager_add_host_machine(Manager *m) {
t->leader = TAKE_PIDREF(pidref);
t->id = mid;
/* If vsock is available, let's expose the loopback CID for the local host (and not the actual local
* CID, in order to return a ideally constant record for the host) */
if (vsock_get_local_cid(/* ret= */ NULL) >= 0)
t->vsock_cid = VMADDR_CID_LOCAL;
t->root_directory = TAKE_PTR(rd);
t->unit = TAKE_PTR(unit);