/dev/vhost-vsock is usable only if the module is loaded. Let's load the module just like in other places where kernel module is required (nbd, pci stub driver). Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@xxxxxxxxxxxxx> --- src/qemu/qemu_process.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ec6ca14..5aaa77c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -92,6 +92,7 @@ #include "viridentity.h" #include "virthreadjob.h" #include "virutil.h" +#include "virkmod.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -6414,6 +6415,7 @@ qemuProcessPrepareHostStorage(virQEMUDriverPtr driver, return 0; } +#define VHOST_VSOCK_MODULE "vhost-vsock" int qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock) @@ -6422,6 +6424,22 @@ qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock) const char *vsock_path = "/dev/vhost-vsock"; int fd; + if (virKModIsProhibited(VHOST_VSOCK_MODULE)) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to load vhost-vsock module: " + "administratively prohibited")); + return -1; + } else { + g_autofree char *errbuf = NULL; + + if ((errbuf = virKModLoad(VHOST_VSOCK_MODULE))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to load vhost-vsock module: %s"), + errbuf); + return -1; + } + } + if ((fd = open(vsock_path, O_RDWR)) < 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("unable to open vhost-vsock device")); -- 1.8.3.1