lkml.org 
[lkml]   [2018]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v2 0/7] arm64: uprobes - ARM32 instruction probing
    Date
    The uprobe feature on ARM64 kernel does not support ARM A32 instruction
    probing, making 32 bit apps running on 64 bit kernel unprobeable.

    This patchset utilizes ARM32 uprobe code in ARM64 tree with following
    modifications:
    - moves ARM32 uprobes code form arch/arm to lib/uprobes/arm to be reused
    by ARM64 code
    - makes adjustments in api so that it suits the one used by ARM64 kernel, e.g.
    struct pt_regs, register numbers
    - takes into account differences between 32 and 64 bit ARM architectures.
    A64 instruction handling is left unchanged.

    Detect what kind of instruction is being probed and depending on the result:
    - if an A64 instruction handle it the old way, using existing A64 instructions
    probing code,
    - if an A32 instruction decode it and handle using the new code, moved from
    32 bit arm kernel tree.

    Currently following test cases have been carried out with positive results:
    - simulation-able instructions, like: STM, LDM, BLX, BL
    - xol-able instructions, like: STR, LDR, ADD, CMN, CMP
    - branching
    - uretprobes.

    This patchset does not implement T32 (Thumb) instructions probing (which is
    also unsupported on "native" ARM32 arch).

    v2:
    - Rebased on 4.19-rc4 and tested against it
    - Fixed build errors reported by kbuild test robot

    Maciej Slodczyk (7):
    arm64: move arm uprobes code to be reused by arm64
    arm64: uprobes - fix checkpatch issues
    arm64: introduce get_swbp_insn() instead of static assignment
    arm64: change arm64 probes handler prototype
    arm64: make arm uprobes code reusable by arm64
    arm64: change arm_probe_decode_insn() function name
    arm64: uprobes - ARM32 instruction probing

    arch/arm/include/asm/probes.h | 8 ++
    arch/arm/include/asm/ptrace.h | 32 +++++
    arch/arm/include/asm/uprobes.h | 2 +-
    arch/arm/probes/Makefile | 8 +-
    arch/arm/probes/kprobes/actions-arm.c | 2 +-
    arch/arm/probes/kprobes/checkers-arm.c | 4 +-
    arch/arm/probes/kprobes/checkers-common.c | 4 +-
    arch/arm/probes/kprobes/checkers-thumb.c | 2 +-
    arch/arm/probes/kprobes/checkers.h | 2 +-
    arch/arm/probes/kprobes/core.c | 2 +-
    arch/arm/probes/kprobes/core.h | 2 +-
    arch/arm/probes/kprobes/test-core.c | 2 +-
    arch/arm/probes/uprobes/Makefile | 2 +-
    arch/arm/probes/uprobes/core.c | 10 +-
    arch/arm64/include/asm/probes.h | 24 +++-
    arch/arm64/include/asm/ptrace.h | 21 +++
    arch/arm64/include/asm/uprobes.h | 21 ++-
    arch/arm64/kernel/debug-monitors.c | 8 ++
    arch/arm64/kernel/probes/Makefile | 2 +
    arch/arm64/kernel/probes/decode-insn.c | 30 ++--
    arch/arm64/kernel/probes/decode-insn.h | 15 +-
    arch/arm64/kernel/probes/kprobes.c | 4 +-
    arch/arm64/kernel/probes/simulate-insn.c | 32 +++--
    arch/arm64/kernel/probes/simulate-insn.h | 24 ++--
    arch/arm64/kernel/probes/uprobes.c | 122 ++++++++++++++--
    include/linux/uprobes.h | 1 +
    kernel/events/uprobes.c | 12 +-
    lib/Makefile | 2 +
    lib/probes/Makefile | 2 +
    lib/probes/arm/Makefile | 11 ++
    .../uprobes => lib/probes/arm}/actions-arm.c | 153 ++++++++++++++++++---
    {arch/arm/probes => lib/probes/arm}/decode-arm.c | 58 +++++---
    {arch/arm/probes => lib/probes/arm}/decode-arm.h | 4 +-
    {arch/arm/probes => lib/probes/arm}/decode.c | 18 ++-
    {arch/arm/probes => lib/probes/arm}/decode.h | 48 ++++---
    35 files changed, 552 insertions(+), 142 deletions(-)
    create mode 100644 lib/probes/Makefile
    create mode 100644 lib/probes/arm/Makefile
    rename {arch/arm/probes/uprobes => lib/probes/arm}/actions-arm.c (61%)
    rename {arch/arm/probes => lib/probes/arm}/decode-arm.c (95%)
    rename {arch/arm/probes => lib/probes/arm}/decode-arm.h (94%)
    rename {arch/arm/probes => lib/probes/arm}/decode.c (98%)
    rename {arch/arm/probes => lib/probes/arm}/decode.h (94%)

    --
    2.7.4

    \
     
     \ /
      Last update: 2018-09-26 14:12    [W:4.723 / U:0.308 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site