x86/pv: Don't clobber NT on return-to-guest
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 20 Oct 2020 12:41:04 +0000 (14:41 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 20 Oct 2020 12:41:04 +0000 (14:41 +0200)
commit0974e0085d6de5ae2b60c831e04c07dd1f0f9ba2
tree2629adc02ed95582e948fb405fd90fd0514fb3bc
parenta279fcbb4f1a9c623dcb0a8f5d86c6a4123cf741
x86/pv: Don't clobber NT on return-to-guest

A 64bit IRET can restore NT - the faulting case is when NT is set in the live
flags.  This change had an unintended consequence of causing the NT flag to
spontaneously disappear from guest context whenever a interrupt/exception
occurred.

In combination with a SYSENTER which sets both TF and NT, Xen's handling of
the #DB exceptions clears NT before it is even recorded suitably in the guest
kernel's view of what userspace was doing.

Reported-by: Andy Lutomirski <luto@kernel.org>
Fixes: 0e47f92b0 ("x86: force EFLAGS.IF on when exiting to PV guests")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
master commit: 5bcac985498ed83d89666959175ca9c9ed561ae1
master date: 2020-09-24 21:02:35 +0100
xen/arch/x86/x86_64/compat/entry.S
xen/arch/x86/x86_64/entry.S