diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 8c3329995d..059df6fc12 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -1404,8 +1404,8 @@
security technology is enabled on the system. Currently, the recognized values are
selinux, apparmor, tomoyo,
ima, smack, audit,
- uefi-secureboot and tpm2. The test may be negated by prepending
- an exclamation mark.
+ uefi-secureboot, tpm2 and cvm.
+ The test may be negated by prepending an exclamation mark.
diff --git a/src/shared/condition.c b/src/shared/condition.c
index a79361e9e1..092f32a69e 100644
--- a/src/shared/condition.c
+++ b/src/shared/condition.c
@@ -24,6 +24,7 @@
#include "cgroup-util.h"
#include "compare-operator.h"
#include "condition.h"
+#include "confidential-virt.h"
#include "cpu-set-util.h"
#include "creds-util.h"
#include "efi-api.h"
@@ -689,6 +690,8 @@ static int condition_test_security(Condition *c, char **env) {
return is_efi_secure_boot();
if (streq(c->parameter, "tpm2"))
return has_tpm2();
+ if (streq(c->parameter, "cvm"))
+ return detect_confidential_virtualization() > 0;
return false;
}
diff --git a/src/test/test-condition.c b/src/test/test-condition.c
index 317a104f4e..6d57ba8da9 100644
--- a/src/test/test-condition.c
+++ b/src/test/test-condition.c
@@ -14,6 +14,7 @@
#include "battery-util.h"
#include "cgroup-util.h"
#include "condition.h"
+#include "confidential-virt.h"
#include "cpu-set-util.h"
#include "efi-loader.h"
#include "env-util.h"
@@ -784,6 +785,12 @@ TEST(condition_test_security) {
assert_se(condition);
assert_se(condition_test(condition, environ) == is_efi_secure_boot());
condition_free(condition);
+
+ condition = condition_new(CONDITION_SECURITY, "cvm", false, false);
+ assert_se(condition);
+ assert_se(condition_test(condition, environ) ==
+ (detect_confidential_virtualization() != CONFIDENTIAL_VIRTUALIZATION_NONE));
+ condition_free(condition);
}
TEST(print_securities) {
@@ -795,6 +802,8 @@ TEST(print_securities) {
log_info("SMACK: %s", yes_no(mac_smack_use()));
log_info("Audit: %s", yes_no(use_audit()));
log_info("UEFI secure boot: %s", yes_no(is_efi_secure_boot()));
+ log_info("Confidential VM: %s", yes_no
+ (detect_confidential_virtualization() != CONFIDENTIAL_VIRTUALIZATION_NONE));
log_info("-------------------------------------------");
}