diff --git a/src/basic/virt.c b/src/basic/virt.c index f264cc6eb3d78..aadc923bb54f9 100644 --- a/src/basic/virt.c +++ b/src/basic/virt.c @@ -264,6 +264,7 @@ static Virtualization detect_vm_dmi(void) { * so we fallback to using the product name which is less restricted * to distinguish metal systems from virtualized instances */ _cleanup_free_ char *s = NULL; + const char *e; r = read_full_virtual_file("/sys/class/dmi/id/product_name", &s, NULL); /* In EC2, virtualized is much more common than metal, so if for some reason @@ -273,8 +274,9 @@ static Virtualization detect_vm_dmi(void) { " assuming virtualized: %m"); return VIRTUALIZATION_AMAZON; } - if (endswith(truncate_nl(s), ".metal")) { - log_debug("DMI product name ends with '.metal', assuming no virtualization"); + e = strstrafter(truncate_nl(s), ".metal"); + if (e && IN_SET(*e, 0, '-')) { + log_debug("DMI product name has '.metal', assuming no virtualization"); return VIRTUALIZATION_NONE; } else return VIRTUALIZATION_AMAZON;