]> git.baikalelectronics.ru Git - kernel.git/commit
uprobes/x86: Refuse to attach uprobe to "word-sized" branch insns
authorDenys Vlasenko <dvlasenk@redhat.com>
Thu, 24 Apr 2014 17:08:24 +0000 (19:08 +0200)
committerOleg Nesterov <oleg@redhat.com>
Wed, 30 Apr 2014 17:10:33 +0000 (19:10 +0200)
commit862ab95bc4eb3b9c965b3b92d0fdfde3911f66d8
tree9df825a8df4a2e6096c21cb1547c661742b52e05
parent5c49180f482a644c428c0419ce333fb7fe21bbcc
uprobes/x86: Refuse to attach uprobe to "word-sized" branch insns

All branch insns on x86 can be prefixed with the operand-size
override prefix, 0x66. It was only ever useful for performing
jumps to 32-bit offsets in 16-bit code segments.

In 32-bit code, such instructions are useless since
they cause IP truncation to 16 bits, and in case of call insns,
they save only 16 bits of return address and misalign
the stack pointer as a "bonus".

In 64-bit code, such instructions are treated differently by Intel
and AMD CPUs: Intel ignores the prefix altogether,
AMD treats them the same as in 32-bit mode.

Before this patch, the emulation code would execute
the instructions as if they have no 0x66 prefix.

With this patch, we refuse to attach uprobes to such insns.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Acked-by: Jim Keniston <jkenisto@us.ibm.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
arch/x86/kernel/uprobes.c