On Wed, 05 Jun 2019 15:08:01 +0200
Peter Zijlstra <[email protected]> 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.

We could make it a WARN_ON() and return without doing anything.

This also prevents us from ever changing two byte jmps.

-- Steve

> +
> +     /*
>        * Corresponding read barrier in int3 notifier for making sure the
> -      * in_progress and handler are correctly ordered wrt. patching.
> +      * in_progress and opcode are correctly ordered wrt. patching.
>        */
>       smp_wmb();
>  
> -

Reply via email to