Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 722c05f2 authored by Avi Kivity's avatar Avi Kivity
Browse files

KVM: MMU: Fix potential race setting upper shadow ptes on nonpae hosts



The direct mapped shadow code (used for real mode and two dimensional paging)
sets upper-level ptes using direct assignment rather than calling
set_shadow_pte().  A nonpae host will split this into two writes, which opens
up a race if another vcpu accesses the same memory area.

Fix by calling set_shadow_pte() instead of assigning directly.

Noticed by Izik Eidus.

Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
parent 2a7c5b8b
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -1189,9 +1189,10 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write,
				return -ENOMEM;
			}

			table[index] = __pa(new_table->spt)
			set_shadow_pte(&table[index],
				       __pa(new_table->spt)
				       | PT_PRESENT_MASK | PT_WRITABLE_MASK
				| shadow_user_mask | shadow_x_mask;
				       | shadow_user_mask | shadow_x_mask);
		}
		table_addr = table[index] & PT64_BASE_ADDR_MASK;
	}