Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754585AbbGFLLb (ORCPT ); Mon, 6 Jul 2015 07:11:31 -0400 Received: from mail7.hitachi.co.jp ([133.145.228.42]:36848 "EHLO mail7.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754024AbbGFLL1 (ORCPT ); Mon, 6 Jul 2015 07:11:27 -0400 Message-ID: <559A6257.60608@hitachi.com> Date: Mon, 06 Jul 2015 20:11:19 +0900 From: Masami Hiramatsu Organization: Hitachi, Ltd., Japan User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Pratyush Anand , linux-arm-kernel@lists.infradead.org, linux@arm.linux.org.uk, catalin.marinas@arm.com, will.deacon@arm.com CC: linux-kernel@vger.kernel.org, wcohen@redhat.com, dave.long@linaro.org, steve.capper@linaro.org Subject: Re: [PATCH 1/2] arm64: Blacklist non-kprobe-able symbols References: <9994841a0b0a8194a6dcc1b6af148ba358488c62.1436158027.git.panand@redhat.com> In-Reply-To: <9994841a0b0a8194a6dcc1b6af148ba358488c62.1436158027.git.panand@redhat.com> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8757 Lines: 286 On 2015/07/06 14:03, Pratyush Anand wrote: > Add all function symbols which are called from do_debug_exception under > NOKPROBE_SYMBOL, as they can not kprobed. Could you tell me how you checked that? from the code? Thank you, > > Signed-off-by: Pratyush Anand > --- > arch/arm64/kernel/debug-monitors.c | 18 ++++++++++++++++++ > arch/arm64/kernel/hw_breakpoint.c | 8 ++++++++ > arch/arm64/kernel/kgdb.c | 4 ++++ > arch/arm64/mm/fault.c | 1 + > 4 files changed, 31 insertions(+) > > diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c > index 237a21f675fd..6d356b2cc674 100644 > --- a/arch/arm64/kernel/debug-monitors.c > +++ b/arch/arm64/kernel/debug-monitors.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -47,6 +48,7 @@ static void mdscr_write(u32 mdscr) > asm volatile("msr mdscr_el1, %0" :: "r" (mdscr)); > local_dbg_restore(flags); > } > +NOKPROBE_SYMBOL(mdscr_write); > > static u32 mdscr_read(void) > { > @@ -54,6 +56,7 @@ static u32 mdscr_read(void) > asm volatile("mrs %0, mdscr_el1" : "=r" (mdscr)); > return mdscr; > } > +NOKPROBE_SYMBOL(mdscr_read); > > /* > * Allow root to disable self-hosted debug from userspace. > @@ -102,6 +105,7 @@ void enable_debug_monitors(enum debug_elx el) > mdscr_write(mdscr); > } > } > +NOKPROBE_SYMBOL(enable_debug_monitors); > > void disable_debug_monitors(enum debug_elx el) > { > @@ -122,6 +126,7 @@ void disable_debug_monitors(enum debug_elx el) > mdscr_write(mdscr); > } > } > +NOKPROBE_SYMBOL(disable_debug_monitors); > > /* > * OS lock clearing. > @@ -173,6 +178,7 @@ static void set_regs_spsr_ss(struct pt_regs *regs) > spsr |= DBG_SPSR_SS; > regs->pstate = spsr; > } > +NOKPROBE_SYMBOL(set_regs_spsr_ss); > > static void clear_regs_spsr_ss(struct pt_regs *regs) > { > @@ -182,6 +188,7 @@ static void clear_regs_spsr_ss(struct pt_regs *regs) > spsr &= ~DBG_SPSR_SS; > regs->pstate = spsr; > } > +NOKPROBE_SYMBOL(clear_regs_spsr_ss); > > /* EL1 Single Step Handler hooks */ > static LIST_HEAD(step_hook); > @@ -224,6 +231,7 @@ static int call_step_hook(struct pt_regs *regs, unsigned int esr) > > return retval; > } > +NOKPROBE_SYMBOL(call_step_hook); > > static int single_step_handler(unsigned long addr, unsigned int esr, > struct pt_regs *regs) > @@ -270,6 +278,7 @@ static int single_step_handler(unsigned long addr, unsigned int esr, > > return 0; > } > +NOKPROBE_SYMBOL(single_step_handler); > > /* > * Breakpoint handler is re-entrant as another breakpoint can > @@ -306,6 +315,7 @@ static int call_break_hook(struct pt_regs *regs, unsigned int esr) > > return fn ? fn(regs, esr) : DBG_HOOK_ERROR; > } > +NOKPROBE_SYMBOL(call_break_hook); > > static int brk_handler(unsigned long addr, unsigned int esr, > struct pt_regs *regs) > @@ -338,6 +348,7 @@ static int brk_handler(unsigned long addr, unsigned int esr, > > return 0; > } > +NOKPROBE_SYMBOL(brk_handler); > > int aarch32_break_handler(struct pt_regs *regs) > { > @@ -382,6 +393,7 @@ int aarch32_break_handler(struct pt_regs *regs) > force_sig_info(SIGTRAP, &info, current); > return 0; > } > +NOKPROBE_SYMBOL(aarch32_break_handler); > > static int __init debug_traps_init(void) > { > @@ -403,6 +415,7 @@ void user_rewind_single_step(struct task_struct *task) > if (test_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP)) > set_regs_spsr_ss(task_pt_regs(task)); > } > +NOKPROBE_SYMBOL(user_rewind_single_step); > > void user_fastforward_single_step(struct task_struct *task) > { > @@ -418,6 +431,7 @@ void kernel_enable_single_step(struct pt_regs *regs) > mdscr_write(mdscr_read() | DBG_MDSCR_SS); > enable_debug_monitors(DBG_ACTIVE_EL1); > } > +NOKPROBE_SYMBOL(kernel_enable_single_step); > > void kernel_disable_single_step(void) > { > @@ -425,12 +439,14 @@ void kernel_disable_single_step(void) > mdscr_write(mdscr_read() & ~DBG_MDSCR_SS); > disable_debug_monitors(DBG_ACTIVE_EL1); > } > +NOKPROBE_SYMBOL(kernel_disable_single_step); > > int kernel_active_single_step(void) > { > WARN_ON(!irqs_disabled()); > return mdscr_read() & DBG_MDSCR_SS; > } > +NOKPROBE_SYMBOL(kernel_active_single_step); > > /* ptrace API */ > void user_enable_single_step(struct task_struct *task) > @@ -438,8 +454,10 @@ void user_enable_single_step(struct task_struct *task) > set_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP); > set_regs_spsr_ss(task_pt_regs(task)); > } > +NOKPROBE_SYMBOL(user_enable_single_step); > > void user_disable_single_step(struct task_struct *task) > { > clear_ti_thread_flag(task_thread_info(task), TIF_SINGLESTEP); > } > +NOKPROBE_SYMBOL(user_disable_single_step); > diff --git a/arch/arm64/kernel/hw_breakpoint.c b/arch/arm64/kernel/hw_breakpoint.c > index 43b74a3ddaef..91b4c418abcb 100644 > --- a/arch/arm64/kernel/hw_breakpoint.c > +++ b/arch/arm64/kernel/hw_breakpoint.c > @@ -24,6 +24,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -139,6 +140,7 @@ static u64 read_wb_reg(int reg, int n) > > return val; > } > +NOKPROBE_SYMBOL(read_wb_reg); > > static void write_wb_reg(int reg, int n, u64 val) > { > @@ -152,6 +154,7 @@ static void write_wb_reg(int reg, int n, u64 val) > } > isb(); > } > +NOKPROBE_SYMBOL(write_wb_reg); > > /* > * Convert a breakpoint privilege level to the corresponding exception > @@ -169,6 +172,7 @@ static enum debug_elx debug_exception_level(int privilege) > return -EINVAL; > } > } > +NOKPROBE_SYMBOL(debug_exception_level); > > enum hw_breakpoint_ops { > HW_BREAKPOINT_INSTALL, > @@ -573,6 +577,7 @@ static void toggle_bp_registers(int reg, enum debug_elx el, int enable) > write_wb_reg(reg, i, ctrl); > } > } > +NOKPROBE_SYMBOL(toggle_bp_registers); > > /* > * Debug exception handlers. > @@ -652,6 +657,7 @@ unlock: > > return 0; > } > +NOKPROBE_SYMBOL(breakpoint_handler); > > static int watchpoint_handler(unsigned long addr, unsigned int esr, > struct pt_regs *regs) > @@ -754,6 +760,7 @@ unlock: > > return 0; > } > +NOKPROBE_SYMBOL(watchpoint_handler); > > /* > * Handle single-step exception. > @@ -811,6 +818,7 @@ int reinstall_suspended_bps(struct pt_regs *regs) > > return !handled_exception; > } > +NOKPROBE_SYMBOL(reinstall_suspended_bps); > > /* > * Context-switcher for restoring suspended breakpoints. > diff --git a/arch/arm64/kernel/kgdb.c b/arch/arm64/kernel/kgdb.c > index 9469465a5e03..faa4d442688c 100644 > --- a/arch/arm64/kernel/kgdb.c > +++ b/arch/arm64/kernel/kgdb.c > @@ -22,6 +22,7 @@ > #include > #include > #include > +#include > #include > > struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = { > @@ -218,6 +219,7 @@ static int kgdb_brk_fn(struct pt_regs *regs, unsigned int esr) > kgdb_handle_exception(1, SIGTRAP, 0, regs); > return 0; > } > +NOKPROBE_SYMBOL(kgdb_brk_fn) > > static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr) > { > @@ -226,6 +228,7 @@ static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr) > > return 0; > } > +NOKPROBE_SYMBOL(kgdb_compiled_brk_fn); > > static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr) > { > @@ -235,6 +238,7 @@ static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr) > kgdb_handle_exception(1, SIGTRAP, 0, regs); > return 0; > } > +NOKPROBE_SYMBOL(kgdb_step_brk_fn); > > static struct break_hook kgdb_brkpt_hook = { > .esr_mask = 0xffffffff, > diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c > index 75750a91907a..0d0b02ce2074 100644 > --- a/arch/arm64/mm/fault.c > +++ b/arch/arm64/mm/fault.c > @@ -561,3 +561,4 @@ asmlinkage int __exception do_debug_exception(unsigned long addr, > > return 0; > } > +NOKPROBE_SYMBOL(do_debug_exception) > -- Masami HIRAMATSU Linux Technology Research Center, System Productivity Research Dept. Center for Technology Innovation - Systems Engineering Hitachi, Ltd., Research & Development Group E-mail: masami.hiramatsu.pt@hitachi.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/