lkml.org 
[lkml]   [2021]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 099/103] ARM: 9071/1: uprobes: Dont hook on thumb instructions
    Date
    From: Fredrik Strupe <fredrik@strupe.net>

    commit d2f7eca60b29006285d57c7035539e33300e89e5 upstream.

    Since uprobes is not supported for thumb, check that the thumb bit is
    not set when matching the uprobes instruction hooks.

    The Arm UDF instructions used for uprobes triggering
    (UPROBE_SWBP_ARM_INSN and UPROBE_SS_ARM_INSN) coincidentally share the
    same encoding as a pair of unallocated 32-bit thumb instructions (not
    UDF) when the condition code is 0b1111 (0xf). This in effect makes it
    possible to trigger the uprobes functionality from thumb, and at that
    using two unallocated instructions which are not permanently undefined.

    Signed-off-by: Fredrik Strupe <fredrik@strupe.net>
    Cc: stable@vger.kernel.org
    Fixes: c7edc9e326d5 ("ARM: add uprobes support")
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/arm/probes/uprobes/core.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/arch/arm/probes/uprobes/core.c
    +++ b/arch/arm/probes/uprobes/core.c
    @@ -204,7 +204,7 @@ unsigned long uprobe_get_swbp_addr(struc
    static struct undef_hook uprobes_arm_break_hook = {
    .instr_mask = 0x0fffffff,
    .instr_val = (UPROBE_SWBP_ARM_INSN & 0x0fffffff),
    - .cpsr_mask = MODE_MASK,
    + .cpsr_mask = (PSR_T_BIT | MODE_MASK),
    .cpsr_val = USR_MODE,
    .fn = uprobe_trap_handler,
    };
    @@ -212,7 +212,7 @@ static struct undef_hook uprobes_arm_bre
    static struct undef_hook uprobes_arm_ss_hook = {
    .instr_mask = 0x0fffffff,
    .instr_val = (UPROBE_SS_ARM_INSN & 0x0fffffff),
    - .cpsr_mask = MODE_MASK,
    + .cpsr_mask = (PSR_T_BIT | MODE_MASK),
    .cpsr_val = USR_MODE,
    .fn = uprobe_trap_handler,
    };

    \
     
     \ /
      Last update: 2021-04-19 15:39    [W:2.441 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site