diff --git a/man/systemd-detect-virt.xml b/man/systemd-detect-virt.xml index a4fcdfbc9d..e89f72bc22 100644 --- a/man/systemd-detect-virt.xml +++ b/man/systemd-detect-virt.xml @@ -258,6 +258,11 @@ protvirt IBM Protected Virtualization (Secure Execution) + + arm64 + cca + Arm Confidential Compute Architecture + diff --git a/src/basic/confidential-virt.c b/src/basic/confidential-virt.c index 986a57e046..796ae6143c 100644 --- a/src/basic/confidential-virt.c +++ b/src/basic/confidential-virt.c @@ -10,6 +10,7 @@ #include "confidential-virt-fundamental.h" #include "confidential-virt.h" +#include "errno-util.h" #include "fd-util.h" #include "fileio.h" #include "missing_threads.h" @@ -226,7 +227,18 @@ static ConfidentialVirtualization detect_confidential_virtualization_impl(void) return CONFIDENTIAL_VIRTUALIZATION_NONE; } +#elif defined(__aarch64__) +static ConfidentialVirtualization detect_confidential_virtualization_impl(void) { + int r; + r = RET_NERRNO(access("/sys/devices/platform/arm-cca-dev", F_OK)); + if (r < 0) { + log_debug_errno(r, "Unable to check /sys/devices/platform/arm-cca-dev: %m"); + return CONFIDENTIAL_VIRTUALIZATION_NONE; + } + + return CONFIDENTIAL_VIRTUALIZATION_CCA; +} #else /* ! x86_64 */ static ConfidentialVirtualization detect_confidential_virtualization_impl(void) { log_debug("No confidential virtualization detection on this architecture"); @@ -250,6 +262,7 @@ static const char *const confidential_virtualization_table[_CONFIDENTIAL_VIRTUAL [CONFIDENTIAL_VIRTUALIZATION_SEV_SNP] = "sev-snp", [CONFIDENTIAL_VIRTUALIZATION_TDX] = "tdx", [CONFIDENTIAL_VIRTUALIZATION_PROTVIRT] = "protvirt", + [CONFIDENTIAL_VIRTUALIZATION_CCA] = "cca", }; DEFINE_STRING_TABLE_LOOKUP(confidential_virtualization, ConfidentialVirtualization); diff --git a/src/basic/confidential-virt.h b/src/basic/confidential-virt.h index 07379bca7c..097bbf7cfe 100644 --- a/src/basic/confidential-virt.h +++ b/src/basic/confidential-virt.h @@ -14,6 +14,7 @@ typedef enum ConfidentialVirtualization { CONFIDENTIAL_VIRTUALIZATION_SEV_SNP, CONFIDENTIAL_VIRTUALIZATION_TDX, CONFIDENTIAL_VIRTUALIZATION_PROTVIRT, + CONFIDENTIAL_VIRTUALIZATION_CCA, _CONFIDENTIAL_VIRTUALIZATION_MAX, _CONFIDENTIAL_VIRTUALIZATION_INVALID = -EINVAL,