]> xenbits.xensource.com Git - xen.git/commitdiff
x86/mm: correct TLB flush condition in _get_page_type()
authorJan Beulich <jbeulich@suse.com>
Tue, 26 Jul 2022 13:04:11 +0000 (15:04 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 26 Jul 2022 13:04:11 +0000 (15:04 +0200)
When this logic was moved, it was moved across the point where nx is
updated to hold the new type for the page. IOW originally it was
equivalent to using x (and perhaps x would better have been used), but
now it isn't anymore. Switch to using x, which then brings things in
line again with the slightly earlier comment there (now) talking about
transitions _from_ writable.

I have to confess though that I cannot make a direct connection between
the reported observed behavior of guests leaving several pages around
with pending general references and the change here. Repeated testing,
nevertheless, confirms the reported issue is no longer there.

This is CVE-2022-33745 / XSA-408.

Reported-by: Charles Arnold <carnold@suse.com>
Fixes: 8cc5036bc385 ("x86/pv: Fix ABAC cmpxchg() race in _get_page_type()")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: a9949efb288fd6e21bbaf9d5826207c7c41cda27
master date: 2022-07-26 14:54:34 +0200

xen/arch/x86/mm.c

index 3b72d9e8d322582d759db238d88f830825f931dc..f11ad9cb2daf39bbe277303bbcb5f15eeb7838cc 100644 (file)
@@ -2994,7 +2994,7 @@ static int _get_page_type(struct page_info *page, unsigned long type,
             if ( unlikely(!cpumask_empty(mask)) &&
                  /* Shadow mode: track only writable pages. */
                  (!shadow_mode_enabled(d) ||
-                  ((nx & PGT_type_mask) == PGT_writable_page)) )
+                  ((x & PGT_type_mask) == PGT_writable_page)) )
             {
                 perfc_incr(need_flush_tlb_flush);
                 /*