diff --git a/tools/virt-host-validate-common.c b/tools/virt-host-validate-common.c index 12a98f41fcbaff706115e185382cd5ff28fd9d99..d646a79ec1b37a633fe57348a48fc698ce7cae4c 100644 --- a/tools/virt-host-validate-common.c +++ b/tools/virt-host-validate-common.c @@ -115,12 +115,29 @@ void virHostMsgFail(virHostValidateLevel level, } -int virHostValidateDevice(const char *hvname, - const char *dev_name, - virHostValidateLevel level, - const char *hint) +int virHostValidateDeviceExists(const char *hvname, + const char *dev_name, + virHostValidateLevel level, + const char *hint) { - virHostMsgCheck(hvname, "for device %s", dev_name); + virHostMsgCheck(hvname, "if device %s exists", dev_name); + + if (access(dev_name, F_OK) < 0) { + virHostMsgFail(level, hint); + return -1; + } + + virHostMsgPass(); + return 0; +} + + +int virHostValidateDeviceAccessible(const char *hvname, + const char *dev_name, + virHostValidateLevel level, + const char *hint) +{ + virHostMsgCheck(hvname, "if device %s is accessible", dev_name); if (access(dev_name, R_OK|W_OK) < 0) { virHostMsgFail(level, hint); diff --git a/tools/virt-host-validate-common.h b/tools/virt-host-validate-common.h index 9d8bceaea32ded57f6553c973e4718c12bee8158..c25e69ca6019255f32537ae570682f4fae50d9dd 100644 --- a/tools/virt-host-validate-common.h +++ b/tools/virt-host-validate-common.h @@ -42,10 +42,15 @@ extern void virHostMsgPass(void); extern void virHostMsgFail(virHostValidateLevel level, const char *hint); -extern int virHostValidateDevice(const char *hvname, - const char *dev_name, - virHostValidateLevel level, - const char *hint); +extern int virHostValidateDeviceExists(const char *hvname, + const char *dev_name, + virHostValidateLevel level, + const char *hint); + +extern int virHostValidateDeviceAccessible(const char *hvname, + const char *dev_name, + virHostValidateLevel level, + const char *hint); extern bool virHostValidateHasCPUFlag(const char *name); diff --git a/tools/virt-host-validate-qemu.c b/tools/virt-host-validate-qemu.c index 33a573825494517fdfd3ac7c53a5ccc6bf596ef0..9486064f8a2946ce842428ebafa33169efc2e862 100644 --- a/tools/virt-host-validate-qemu.c +++ b/tools/virt-host-validate-qemu.c @@ -20,7 +20,6 @@ */ #include - #include "virt-host-validate-qemu.h" #include "virt-host-validate-common.h" @@ -32,25 +31,30 @@ int virHostValidateQEMU(void) if (virHostValidateHasCPUFlag("svm") || virHostValidateHasCPUFlag("vmx")) { virHostMsgPass(); - if (virHostValidateDevice("QEMU", "/dev/kvm", - VIR_HOST_VALIDATE_FAIL, - _("Check that the 'kvm-intel' or 'kvm-amd' modules are " - "loaded & the BIOS has enabled virtualization")) < 0) + if (virHostValidateDeviceExists("QEMU", "/dev/kvm", + VIR_HOST_VALIDATE_FAIL, + _("Check that the 'kvm-intel' or 'kvm-amd' modules are " + "loaded & the BIOS has enabled virtualization")) < 0) + ret = -1; + else if (virHostValidateDeviceAccessible("QEMU", "/dev/kvm", + VIR_HOST_VALIDATE_FAIL, + _("Check /dev/kvm is world writable or you are in " + "a group that is allowed to access it")) < 0) ret = -1; } else { virHostMsgFail(VIR_HOST_VALIDATE_WARN, _("Only emulated CPUs are available, performance will be significantly limited")); } - if (virHostValidateDevice("QEMU", "/dev/vhost-net", - VIR_HOST_VALIDATE_WARN, - _("Load the 'vhost_net' module to improve performance " - "of virtio networking")) < 0) + if (virHostValidateDeviceExists("QEMU", "/dev/vhost-net", + VIR_HOST_VALIDATE_WARN, + _("Load the 'vhost_net' module to improve performance " + "of virtio networking")) < 0) ret = -1; - if (virHostValidateDevice("QEMU", "/dev/net/tun", - VIR_HOST_VALIDATE_FAIL, - _("Load the 'tun' module to enable networking for QEMU guests")) < 0) + if (virHostValidateDeviceExists("QEMU", "/dev/net/tun", + VIR_HOST_VALIDATE_FAIL, + _("Load the 'tun' module to enable networking for QEMU guests")) < 0) ret = -1; return ret;