41 lines
1.7 KiB
Diff
41 lines
1.7 KiB
Diff
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||
|
From: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
Date: Thu, 9 May 2024 15:55:47 +0200
|
||
|
Subject: [PATCH] target/i386: rdpkru/wrpkru are no-prefix instructions
|
||
|
|
||
|
Reject 0x66/0xf3/0xf2 in front of them.
|
||
|
|
||
|
Cc: qemu-stable@nongnu.org
|
||
|
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
|
||
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||
|
(cherry picked from commit 40a3ec7b5ffde500789d016660a171057d6b467c)
|
||
|
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
|
||
|
---
|
||
|
target/i386/tcg/translate.c | 6 ++++--
|
||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
|
||
|
index b60f3bd642..3e949fe964 100644
|
||
|
--- a/target/i386/tcg/translate.c
|
||
|
+++ b/target/i386/tcg/translate.c
|
||
|
@@ -6083,7 +6083,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||
|
gen_ldst_modrm(env, s, modrm, ot, OR_TMP0, 1);
|
||
|
break;
|
||
|
case 0xee: /* rdpkru */
|
||
|
- if (prefixes & PREFIX_LOCK) {
|
||
|
+ if (s->prefix & (PREFIX_LOCK | PREFIX_DATA
|
||
|
+ | PREFIX_REPZ | PREFIX_REPNZ)) {
|
||
|
goto illegal_op;
|
||
|
}
|
||
|
tcg_gen_trunc_tl_i32(s->tmp2_i32, cpu_regs[R_ECX]);
|
||
|
@@ -6091,7 +6092,8 @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
|
||
|
tcg_gen_extr_i64_tl(cpu_regs[R_EAX], cpu_regs[R_EDX], s->tmp1_i64);
|
||
|
break;
|
||
|
case 0xef: /* wrpkru */
|
||
|
- if (prefixes & PREFIX_LOCK) {
|
||
|
+ if (s->prefix & (PREFIX_LOCK | PREFIX_DATA
|
||
|
+ | PREFIX_REPZ | PREFIX_REPNZ)) {
|
||
|
goto illegal_op;
|
||
|
}
|
||
|
tcg_gen_concat_tl_i64(s->tmp1_i64, cpu_regs[R_EAX],
|