diff options
author | Masami Hiramatsu <mhiramat@kernel.org> | 2020-12-03 13:51:01 +0900 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2020-12-06 10:03:08 +0100 |
commit | 84da009f06e60cf59d5e861f8e2101d2d3885517 (patch) | |
tree | 65cc9d31679964de585d62db7a701ee112e1e703 /arch/x86 | |
parent | 12cb908a11b2544b5f53e9af856e6b6a90ed5533 (diff) | |
download | linux-84da009f06e60cf59d5e861f8e2101d2d3885517.tar.bz2 |
x86/sev-es: Use new for_each_insn_prefix() macro to loop over prefixes bytes
Since insn.prefixes.nbytes can be bigger than the size of
insn.prefixes.bytes[] when a prefix is repeated, the proper
check must be:
insn.prefixes.bytes[i] != 0 and i < 4
instead of using insn.prefixes.nbytes. Use the new
for_each_insn_prefix() macro which does it correctly.
Debugged by Kees Cook <keescook@chromium.org>.
[ bp: Massage commit message. ]
Fixes: 25189d08e516 ("x86/sev-es: Add support for handling IOIO exceptions")
Reported-by: syzbot+9b64b619f10f19d19a7c@syzkaller.appspotmail.com
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/160697106089.3146288.2052422845039649176.stgit@devnote2
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/boot/compressed/sev-es.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/x86/boot/compressed/sev-es.c b/arch/x86/boot/compressed/sev-es.c index 954cb2702e23..27826c265aab 100644 --- a/arch/x86/boot/compressed/sev-es.c +++ b/arch/x86/boot/compressed/sev-es.c @@ -32,13 +32,12 @@ struct ghcb *boot_ghcb; */ static bool insn_has_rep_prefix(struct insn *insn) { + insn_byte_t p; int i; insn_get_prefixes(insn); - for (i = 0; i < insn->prefixes.nbytes; i++) { - insn_byte_t p = insn->prefixes.bytes[i]; - + for_each_insn_prefix(insn, i, p) { if (p == 0xf2 || p == 0xf3) return true; } |