mirror of https://gitee.com/openkylin/libvirt.git
virt-host-validate: distinguish exists vs accessible for devices
Currently we just check that various devices are accessible. This leads to inaccurate errors reported for /dev/kvm and /dev/vhost-net if they exist but an unprivileged user lacks access. Switch existing checks to look for file existance, and add a separate check for accessibility of /dev/kvm since some distros don't grant users access by default. Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
8a6b6037f8
commit
fd6d506c50
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#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;
|
||||
|
|
Loading…
Reference in New Issue