lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 10 Aug 2021 13:53:28 +0800 From: Qi Liu <liuqi115@...wei.com> To: <catalin.marinas@....com>, <will@...nel.org>, <naveen.n.rao@...ux.ibm.com>, <anil.s.keshavamurthy@...el.com>, <davem@...emloft.net>, <mhiramat@...nel.org>, <linux-arm-kernel@...ts.infradead.org> CC: <song.bao.hua@...ilicon.com>, <prime.zeng@...ilicon.com>, <robin.murphy@....com>, <f.fangjian@...wei.com>, <liuqi115@...wei.com>, <linuxarm@...wei.com>, <linux-kernel@...r.kernel.org> Subject: [PATCH v3 0/2] arm64: Enable OPTPROBE for arm64 This patch introduce optprobe for ARM64, using a branch instruction to replace probed instruction. The test result on Hip08 platform is shown here, and optprobe could reduce the latency to 1/4 of normal kprobe kprobe before optimized: [280709.846380] do_empty returned 0 and took 1530 ns to execute [280709.852057] do_empty returned 0 and took 550 ns to execute [280709.857631] do_empty returned 0 and took 440 ns to execute [280709.863215] do_empty returned 0 and took 380 ns to execute [280709.868787] do_empty returned 0 and took 360 ns to execute [280709.874362] do_empty returned 0 and took 340 ns to execute [280709.879936] do_empty returned 0 and took 320 ns to execute [280709.885505] do_empty returned 0 and took 300 ns to execute [280709.891075] do_empty returned 0 and took 280 ns to execute [280709.896646] do_empty returned 0 and took 290 ns to execute [280709.902220] do_empty returned 0 and took 290 ns to execute [280709.907807] do_empty returned 0 and took 290 ns to execute optprobe: [ 2965.964572] do_empty returned 0 and took 90 ns to execute [ 2965.969952] do_empty returned 0 and took 80 ns to execute [ 2965.975332] do_empty returned 0 and took 70 ns to execute [ 2965.980714] do_empty returned 0 and took 60 ns to execute [ 2965.986128] do_empty returned 0 and took 80 ns to execute [ 2965.991507] do_empty returned 0 and took 70 ns to execute [ 2965.996884] do_empty returned 0 and took 70 ns to execute [ 2966.002262] do_empty returned 0 and took 80 ns to execute [ 2966.007642] do_empty returned 0 and took 70 ns to execute [ 2966.013020] do_empty returned 0 and took 70 ns to execute [ 2966.018400] do_empty returned 0 and took 70 ns to execute [ 2966.023779] do_empty returned 0 and took 70 ns to execute [ 2966.029158] do_empty returned 0 and took 70 ns to execute Changes since V2: - Address the comments from Masami, prepare another writable buffer in arch_prepare_optimized_kprobe()and build the trampoline code on it. - Address the comments from Amit, move save_all_base_regs and restore_all_base_regs to <asm/assembler.h>, as these two macros are reused in optprobe. - Link: https://lore.kernel.org/lkml/20210804060209.95817-1-liuqi115@huawei.com/ Changes since V1: - Address the comments from Masami, checks for all branch instructions, and use aarch64_insn_patch_text_nosync() instead of aarch64_insn_patch_text() in each probe. - Link: https://lore.kernel.org/lkml/20210719122417.10355-1-liuqi115@huawei.com/ Qi Liu (2): arm64: assembler: Make save_all_base_regs and restore_all_base_regs common macros arm64: kprobe: Enable OPTPROBE for arm64 arch/arm64/Kconfig | 1 + arch/arm64/include/asm/assembler.h | 52 ++++ arch/arm64/include/asm/kprobes.h | 24 ++ arch/arm64/kernel/probes/Makefile | 2 + arch/arm64/kernel/probes/kprobes.c | 19 +- arch/arm64/kernel/probes/kprobes_trampoline.S | 52 ---- arch/arm64/kernel/probes/opt_arm64.c | 239 ++++++++++++++++++ .../arm64/kernel/probes/optprobe_trampoline.S | 37 +++ 8 files changed, 371 insertions(+), 55 deletions(-) create mode 100644 arch/arm64/kernel/probes/opt_arm64.c create mode 100644 arch/arm64/kernel/probes/optprobe_trampoline.S -- 2.17.1
Powered by blists - more mailing lists