x86/insn-eval: Handle insn_get_opcode() failure
is_string_insn() calls insn_get_opcode() that can fail, but does not handle the failure. is_string_insn() interface does not allow to communicate an error to the caller. Push insn_get_opcode() to the only non-static user of is_string_insn() and fail it early if insn_get_opcode() fails. [ dhansen: fix tabs-versus-spaces breakage ] Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Tested-by: Joerg Roedel <jroedel@suse.de> Acked-by: Tom Lendacky <thomas.lendacky@amd.com> Link: https://lkml.kernel.org/r/20211130184933.31005-2-kirill.shutemov@linux.intel.com
This commit is contained in:
parent
d58071a8a7
commit
23ef731e43
@ -37,8 +37,6 @@ enum reg_type {
|
||||
*/
|
||||
static bool is_string_insn(struct insn *insn)
|
||||
{
|
||||
insn_get_opcode(insn);
|
||||
|
||||
/* All string instructions have a 1-byte opcode. */
|
||||
if (insn->opcode.nbytes != 1)
|
||||
return false;
|
||||
@ -1405,6 +1403,9 @@ void __user *insn_get_addr_ref(struct insn *insn, struct pt_regs *regs)
|
||||
if (!insn || !regs)
|
||||
return (void __user *)-1L;
|
||||
|
||||
if (insn_get_opcode(insn))
|
||||
return (void __user *)-1L;
|
||||
|
||||
switch (insn->addr_bytes) {
|
||||
case 2:
|
||||
return get_addr_ref_16(insn, regs);
|
||||
|
Loading…
Reference in New Issue
Block a user