Messages in this thread | | | Date | Tue, 11 Jun 2019 17:52:48 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH 08/15] x86/alternatives: Teach text_poke_bp() to emulate instructions |
| |
On Tue, Jun 11, 2019 at 11:14:10AM -0400, Steven Rostedt wrote: > On Wed, 05 Jun 2019 15:08:01 +0200 > Peter Zijlstra <peterz@infradead.org> wrote: > > > -void text_poke_bp(void *addr, const void *opcode, size_t len, void *handler) > > +void text_poke_bp(void *addr, const void *opcode, size_t len, const void *emulate) > > { > > unsigned char int3 = 0xcc; > > > > - bp_int3_handler = handler; > > + bp_int3_opcode = emulate ?: opcode; > > bp_int3_addr = (u8 *)addr + sizeof(int3); > > bp_patching_in_progress = true; > > > > lockdep_assert_held(&text_mutex); > > > > /* > > + * poke_int3_handler() relies on @opcode being a 5 byte instruction; > > + * notably a JMP, CALL or NOP5_ATOMIC. > > + */ > > + BUG_ON(len != 5); > > If we have a bug on here, why bother with passing in len at all? Just > force it to be 5.
Masami said the same.
> We could make it a WARN_ON() and return without doing anything. > > This also prevents us from ever changing two byte jmps.
It doesn't; that is, we'd need to add emulation for the 3 byte jump, but that'd be pretty trivial.
| |