x86/alternatives: Teach text_poke_bp() to patch Jcc.d32 instructions
authorPeter Zijlstra <peterz@infradead.org>
Mon, 23 Jan 2023 20:59:17 +0000 (21:59 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 31 Jan 2023 14:05:31 +0000 (15:05 +0100)
commitac0ee0a9560c97fa5fe1409e450c2425d4ebd17a
tree504f81bb70d25dd873e14d74ae5064a043dc8351
parentdb7adcfd1cec4e95155e37bc066fddab302c6340
x86/alternatives: Teach text_poke_bp() to patch Jcc.d32 instructions

In order to re-write Jcc.d32 instructions text_poke_bp() needs to be
taught about them.

The biggest hurdle is that the whole machinery is currently made for 5
byte instructions and extending this would grow struct text_poke_loc
which is currently a nice 16 bytes and used in an array.

However, since text_poke_loc contains a full copy of the (s32)
displacement, it is possible to map the Jcc.d32 2 byte opcodes to
Jcc.d8 1 byte opcode for the int3 emulation.

This then leaves the replacement bytes; fudge that by only storing the
last 5 bytes and adding the rule that 'length == 6' instruction will
be prefixed with a 0x0f byte.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Link: https://lore.kernel.org/r/20230123210607.115718513@infradead.org
arch/x86/kernel/alternative.c