x86/mm: Don't perform flush after failing to update a guests L1e
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 20 Nov 2018 13:58:41 +0000 (14:58 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 20 Nov 2018 13:58:41 +0000 (14:58 +0100)
commit6c8d50288722672ecc8e19b0741a31b521d01706
tree8c9607aafb83f9986805103a06a5d744c956ea42
parentd80988cfc04ee608bee722448e7c3bc8347ec04c
x86/mm: Don't perform flush after failing to update a guests L1e

If the L1e update hasn't occured, the flush cannot do anything useful.  This
skips the potentially expensive vcpumask_to_pcpumask() conversion, and
broadcast TLB shootdown.

More importantly however, we might be in the error path due to a bad va
parameter from the guest, and this should not propagate into the TLB flushing
logic.  The INVPCID instruction for example raises #GP for a non-canonical
address.

This is XSA-279.

Reported-by: Matthew Daley <mattd@bugfuzz.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/mm.c