Messages in this thread Patch in this message | | | Date | Fri, 23 Apr 2010 18:32:35 +0900 | From | Paul Mundt <> | Subject | Re: [PATCH 3/6] hw-breakpoints: Change/Enforce some breakpoints policies |
| |
On Fri, Apr 23, 2010 at 07:13:56AM +0200, Frederic Weisbecker wrote: > diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c > index 675eea7..2d44a2d 100644 > --- a/arch/sh/kernel/hw_breakpoint.c > +++ b/arch/sh/kernel/hw_breakpoint.c > @@ -120,25 +120,16 @@ static int get_hbp_len(u16 hbp_len) > } > > /* > - * Check for virtual address in user space. > - */ > -int arch_check_va_in_userspace(unsigned long va, u16 hbp_len) > -{ > - unsigned int len; > - > - len = get_hbp_len(hbp_len); > - > - return (va <= TASK_SIZE - len); > -} > - > -/* > * Check for virtual address in kernel space. > */
We were also using the va_in_userspace check for the case of signal delivery, so I've just inverted the test for that. Perhaps there's a cleaner way to handle it, though.
Other than that, everything seems to work ok. The ksym tracer and ptrace tests still pass at least. Feel free to add my Tested/Acked-by on the rest if you're respinning it at some point.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
---
diff --git a/arch/sh/include/asm/hw_breakpoint.h b/arch/sh/include/asm/hw_breakpoint.h index 4d5e514..89890f6 100644 --- a/arch/sh/include/asm/hw_breakpoint.h +++ b/arch/sh/include/asm/hw_breakpoint.h @@ -54,8 +54,6 @@ static inline int hw_breakpoint_slots(int type) /* arch/sh/kernel/hw_breakpoint.c */ extern int arch_check_bp_in_kernelspace(struct perf_event *bp); extern int arch_validate_hwbkpt_settings(struct perf_event *bp); -extern int arch_validate_hwbkpt_settings(struct perf_event *bp, - struct task_struct *tsk); extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused, unsigned long val, void *data); diff --git a/arch/sh/kernel/hw_breakpoint.c b/arch/sh/kernel/hw_breakpoint.c index 67564e3..efae6ab 100644 --- a/arch/sh/kernel/hw_breakpoint.c +++ b/arch/sh/kernel/hw_breakpoint.c @@ -344,8 +344,7 @@ static int __kprobes hw_breakpoint_handler(struct die_args *args) perf_bp_event(bp, args->regs); /* Deliver the signal to userspace */ - if (arch_check_va_in_userspace(bp->attr.bp_addr, - bp->attr.bp_len)) { + if (!arch_check_bp_in_kernelspace(bp)) { siginfo_t info; info.si_signo = args->signr;
| |