Skip to content

Commit 3e6e7b6

Browse files
hanliyanglanlanxiyiji
authored andcommitted
KVM: SVM: Force flush caches before reboot CSV guest
hygon inclusion category: feature CVE: NA --------------------------- For memory encrypted guest, its pages' encrypt status will changed at runtime. When user reboot the guest, the pages' encrypt status during last boot were ignored. So during the boot flow of reboot, there may be 2 versions of memory data lies in cache as follows: +--------+ | | | | +--------------+ --+ | | | | \ |________| | | \ cacheline for -> |________| <-+ | | \ pa1(c=0) | | \ |______________| \ | | \_ 64 bytes aligned <- pa1 \ | | _ |______________| 4K | | / | | page cacheline for |________| / | | / pa1(c=1) -> |________| <-+ | | / | | | | / | | | | / | | | | / | | +--------------+ --+ | | | | If the older version cache was flushed after that of newer version, and guest read the memory again, then it will get corrupted data and may lead to crash. In this change, for any memory encrypted guest, the cache is forcibly flushed to memory before the next boot flow, which ensures that memory access is up-to-date. Signed-off-by: hanliyang <hanliyang@hygon.cn> Link: #354 (cherry picked from commit aeab587) Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
1 parent 39173bc commit 3e6e7b6

1 file changed

Lines changed: 5 additions & 2 deletions

File tree

arch/x86/kvm/svm/csv.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,12 +1028,15 @@ static int csv_control_post_system_reset(struct kvm *kvm)
10281028
unsigned long i;
10291029
int ret;
10301030

1031-
if (!sev_es_guest(kvm))
1031+
if (!sev_guest(kvm))
10321032
return 0;
10331033

1034-
/* Flush both host and guest caches of VMSA */
1034+
/* Flush both host and guest caches before next boot flow */
10351035
wbinvd_on_all_cpus();
10361036

1037+
if (!sev_es_guest(kvm))
1038+
return 0;
1039+
10371040
kvm_for_each_vcpu(i, vcpu, kvm) {
10381041
struct vcpu_svm *svm = to_svm(vcpu);
10391042

0 commit comments

Comments
 (0)