i386/sev: Update checks and information related to reduced-phys-bits
The value of the reduced-phys-bits parameter is propogated to the CPUID
information exposed to the guest. Update the current validation check to
account for the size of the CPUID field (6-bits), ensuring the value is
in the range of 1 to 63.
Maintain backward compatibility, to an extent, by allowing a value greater
than 1 (so that the previously documented value of 5 still works), but not
allowing anything over 63.
Fixes: d8575c6c02
("sev/i386: add command to initialize the memory encryption context")
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Message-Id: <cca5341a95ac73f904e6300f10b04f9c62e4e8ff.1664550870.git.thomas.lendacky@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
326e3015c4
commit
8168fed9f8
|
@ -932,15 +932,26 @@ int sev_kvm_init(ConfidentialGuestSupport *cgs, Error **errp)
|
||||||
host_cpuid(0x8000001F, 0, NULL, &ebx, NULL, NULL);
|
host_cpuid(0x8000001F, 0, NULL, &ebx, NULL, NULL);
|
||||||
host_cbitpos = ebx & 0x3f;
|
host_cbitpos = ebx & 0x3f;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The cbitpos value will be placed in bit positions 5:0 of the EBX
|
||||||
|
* register of CPUID 0x8000001F. No need to verify the range as the
|
||||||
|
* comparison against the host value accomplishes that.
|
||||||
|
*/
|
||||||
if (host_cbitpos != sev->cbitpos) {
|
if (host_cbitpos != sev->cbitpos) {
|
||||||
error_setg(errp, "%s: cbitpos check failed, host '%d' requested '%d'",
|
error_setg(errp, "%s: cbitpos check failed, host '%d' requested '%d'",
|
||||||
__func__, host_cbitpos, sev->cbitpos);
|
__func__, host_cbitpos, sev->cbitpos);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sev->reduced_phys_bits < 1) {
|
/*
|
||||||
error_setg(errp, "%s: reduced_phys_bits check failed, it should be >=1,"
|
* The reduced-phys-bits value will be placed in bit positions 11:6 of
|
||||||
" requested '%d'", __func__, sev->reduced_phys_bits);
|
* the EBX register of CPUID 0x8000001F, so verify the supplied value
|
||||||
|
* is in the range of 1 to 63.
|
||||||
|
*/
|
||||||
|
if (sev->reduced_phys_bits < 1 || sev->reduced_phys_bits > 63) {
|
||||||
|
error_setg(errp, "%s: reduced_phys_bits check failed,"
|
||||||
|
" it should be in the range of 1 to 63, requested '%d'",
|
||||||
|
__func__, sev->reduced_phys_bits);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue