x86/uprobes: Do not use prefixes.nbytes when looping over prefixes.bytes
authorMasami Hiramatsu <mhiramat@kernel.org>
Thu, 3 Dec 2020 04:50:37 +0000 (13:50 +0900)
committerBorislav Petkov <bp@suse.de>
Sun, 6 Dec 2020 08:58:13 +0000 (09:58 +0100)
commit4e9a5ae8df5b3365183150f6df49e49dece80d8c
tree3f10655b516680582aceaaae84846f4e53465d26
parent8dcc0e19dfbd73ad6b3172924d6da8f7f3f8b3b0
x86/uprobes: Do not use prefixes.nbytes when looping 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.

Introduce a for_each_insn_prefix() macro for this purpose. Debugged by
Kees Cook <keescook@chromium.org>.

 [ bp: Massage commit message, sync with the respective header in tools/
   and drop "we". ]

Fixes: 2b1444983508 ("uprobes, mm, x86: Add the ability to install and remove uprobes breakpoints")
Reported-by: syzbot+9b64b619f10f19d19a7c@syzkaller.appspotmail.com
Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: stable@vger.kernel.org
Link: https://lkml.kernel.org/r/160697103739.3146288.7437620795200799020.stgit@devnote2
arch/x86/include/asm/insn.h
arch/x86/kernel/uprobes.c
tools/arch/x86/include/asm/insn.h