]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: x86: Access to LDT/GDT that wraparound is incorrect
authorNadav Amit <namit@cs.technion.ac.il>
Thu, 25 Dec 2014 00:52:23 +0000 (02:52 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 8 Jan 2015 21:48:08 +0000 (22:48 +0100)
commit37787d2678d361a7c66ef0c48827563ec3dc1c19
tree472fe75d29ac7e228ffa48cd5c61f9ae60803b5d
parent4540563c7c3780125f5ee7be33d2d08b4641d7ee
KVM: x86: Access to LDT/GDT that wraparound is incorrect

When access to descriptor in LDT/GDT wraparound outside long-mode, the address
of the descriptor should be truncated to 32-bit.  Citing Intel SDM 2.1.1.1
"Global and Local Descriptor Tables in IA-32e Mode": "GDTR and LDTR registers
are expanded to 64-bits wide in both IA-32e sub-modes (64-bit mode and
compatibility mode)."

So in other cases, we need to truncate. Creating new function to return a
pointer to descriptor table to avoid too much code duplication.

Signed-off-by: Nadav Amit <namit@cs.technion.ac.il>
[Wrap 64-bit check with #ifdef CONFIG_X86_64, to avoid a "right shift count
 >= width of type" warning and consequent undefined behavior. - Paolo]
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/emulate.c