Skip to content

Commit 72c6270

Browse files
Marc Zyngieroupton
authored andcommitted
KVM: arm64: Condition FGT registers on feature availability
We shouldn't expose the FEAT_FGT registers unconditionally. Make them dependent on FEAT_FGT being actually advertised to the guest. Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20250714122634.3334816-8-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1 parent 9fe9663 commit 72c6270

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

arch/arm64/kvm/sys_regs.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2592,6 +2592,16 @@ static unsigned int tcr2_el2_visibility(const struct kvm_vcpu *vcpu,
25922592
return __el2_visibility(vcpu, rd, tcr2_visibility);
25932593
}
25942594

2595+
static unsigned int fgt_visibility(const struct kvm_vcpu *vcpu,
2596+
const struct sys_reg_desc *rd)
2597+
{
2598+
if (el2_visibility(vcpu, rd) == 0 &&
2599+
kvm_has_feat(vcpu->kvm, ID_AA64MMFR0_EL1, FGT, IMP))
2600+
return 0;
2601+
2602+
return REG_HIDDEN;
2603+
}
2604+
25952605
static unsigned int s1pie_visibility(const struct kvm_vcpu *vcpu,
25962606
const struct sys_reg_desc *rd)
25972607
{
@@ -3310,8 +3320,8 @@ static const struct sys_reg_desc sys_reg_descs[] = {
33103320
EL2_REG(MDCR_EL2, access_mdcr, reset_mdcr, 0),
33113321
EL2_REG(CPTR_EL2, access_rw, reset_val, CPTR_NVHE_EL2_RES1),
33123322
EL2_REG_VNCR(HSTR_EL2, reset_val, 0),
3313-
EL2_REG_VNCR(HFGRTR_EL2, reset_val, 0),
3314-
EL2_REG_VNCR(HFGWTR_EL2, reset_val, 0),
3323+
EL2_REG_VNCR_FILT(HFGRTR_EL2, fgt_visibility),
3324+
EL2_REG_VNCR_FILT(HFGWTR_EL2, fgt_visibility),
33153325
EL2_REG_VNCR(HFGITR_EL2, reset_val, 0),
33163326
EL2_REG_VNCR(HACR_EL2, reset_val, 0),
33173327

@@ -3331,9 +3341,9 @@ static const struct sys_reg_desc sys_reg_descs[] = {
33313341
vncr_el2_visibility),
33323342

33333343
{ SYS_DESC(SYS_DACR32_EL2), undef_access, reset_unknown, DACR32_EL2 },
3334-
EL2_REG_VNCR(HDFGRTR_EL2, reset_val, 0),
3335-
EL2_REG_VNCR(HDFGWTR_EL2, reset_val, 0),
3336-
EL2_REG_VNCR(HAFGRTR_EL2, reset_val, 0),
3344+
EL2_REG_VNCR_FILT(HDFGRTR_EL2, fgt_visibility),
3345+
EL2_REG_VNCR_FILT(HDFGWTR_EL2, fgt_visibility),
3346+
EL2_REG_VNCR_FILT(HAFGRTR_EL2, fgt_visibility),
33373347
EL2_REG_REDIR(SPSR_EL2, reset_val, 0),
33383348
EL2_REG_REDIR(ELR_EL2, reset_val, 0),
33393349
{ SYS_DESC(SYS_SP_EL1), access_sp_el1},

0 commit comments

Comments
 (0)