Skip to content

Commit 125ffc5

Browse files
marpombonzini
authored andcommitted
KVM: x86: Refactor prefix decoding to prevent Spectre-v1/L1TF attacks
This fixes Spectre-v1/L1TF vulnerabilities in vmx_read_guest_seg_selector(), vmx_read_guest_seg_base(), vmx_read_guest_seg_limit() and vmx_read_guest_seg_ar(). When invoked from emulation, these functions contain index computations based on the (attacker-influenced) segment value. Using constants prevents the attack. Cc: [email protected] Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 6ec4c5e commit 125ffc5

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

arch/x86/kvm/emulate.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5195,16 +5195,28 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len)
51955195
ctxt->ad_bytes = def_ad_bytes ^ 6;
51965196
break;
51975197
case 0x26: /* ES override */
5198+
has_seg_override = true;
5199+
ctxt->seg_override = VCPU_SREG_ES;
5200+
break;
51985201
case 0x2e: /* CS override */
5202+
has_seg_override = true;
5203+
ctxt->seg_override = VCPU_SREG_CS;
5204+
break;
51995205
case 0x36: /* SS override */
5206+
has_seg_override = true;
5207+
ctxt->seg_override = VCPU_SREG_SS;
5208+
break;
52005209
case 0x3e: /* DS override */
52015210
has_seg_override = true;
5202-
ctxt->seg_override = (ctxt->b >> 3) & 3;
5211+
ctxt->seg_override = VCPU_SREG_DS;
52035212
break;
52045213
case 0x64: /* FS override */
5214+
has_seg_override = true;
5215+
ctxt->seg_override = VCPU_SREG_FS;
5216+
break;
52055217
case 0x65: /* GS override */
52065218
has_seg_override = true;
5207-
ctxt->seg_override = ctxt->b & 7;
5219+
ctxt->seg_override = VCPU_SREG_GS;
52085220
break;
52095221
case 0x40 ... 0x4f: /* REX */
52105222
if (mode != X86EMUL_MODE_PROT64)

0 commit comments

Comments
 (0)