diff options
author | Olaf Hering <olaf@aepfle.de> | 2017-12-07 21:09:32 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-12-07 21:09:32 +0100 |
commit | 1a8e414860ad490be3dbff6f4a89d1869d10fd97 (patch) | |
tree | 272bea3d6c3063319b475d385c48bddc28ab0e21 /src | |
parent | bfdf8c3bb86f3dbc8e30e7a0a44d2df0c0c05171 (diff) | |
download | systemd-1a8e414860ad490be3dbff6f4a89d1869d10fd97.tar.gz |
virt: propagate errors in detect_vm_xen_dom0 (#7553)
Update detect_vm_xen_dom0 to propagate errors in case reading
/proc/xen/capabilites fails. This does not fix any bugs, it just makes
it consistent with other functions called by detect_vm.
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/virt.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/basic/virt.c b/src/basic/virt.c index cf91360b35..9a4bc394a4 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -227,15 +227,16 @@ static int detect_vm_xen(void) { return VIRTUALIZATION_XEN; } -static bool detect_vm_xen_dom0(void) { +/* Returns -errno, or 0 for domU, or 1 for dom0 */ +static int detect_vm_xen_dom0(void) { _cleanup_free_ char *domcap = NULL; char *cap, *i; int r; r = read_one_line_file("/proc/xen/capabilities", &domcap); if (r == -ENOENT) { - log_debug("Virtualization XEN not found, /proc/xen/capabilities does not exist"); - return false; + log_debug("Virtualization XEN because /proc/xen/capabilities does not exist"); + return 0; } if (r < 0) return r; @@ -246,11 +247,11 @@ static bool detect_vm_xen_dom0(void) { break; if (!cap) { log_debug("Virtualization XEN DomU found (/proc/xen/capabilites)"); - return false; + return 0; } log_debug("Virtualization XEN Dom0 ignored (/proc/xen/capabilities)"); - return true; + return 1; } static int detect_vm_hypervisor(void) { @@ -408,9 +409,13 @@ finish: /* x86 xen Dom0 is detected as XEN in hypervisor and maybe others. * In order to detect the Dom0 as not virtualization we need to * double-check it */ - if (r == VIRTUALIZATION_XEN && detect_vm_xen_dom0()) - r = VIRTUALIZATION_NONE; - else if (r == VIRTUALIZATION_NONE && other) + if (r == VIRTUALIZATION_XEN) { + int ret = detect_vm_xen_dom0(); + if (ret < 0) + return ret; + if (ret > 0) + r = VIRTUALIZATION_NONE; + } else if (r == VIRTUALIZATION_NONE && other) r = VIRTUALIZATION_VM_OTHER; cached_found = r; |