Messages in this thread |  | | | Date | Sat, 1 May 2010 03:36:13 +0200 | | From | Frederic Weisbecker <> | | Subject | Re: [PATCH 3/6] hw-breakpoints: Change/Enforce some breakpoints policies |
| |
On Fri, Apr 23, 2010 at 06:32:35PM +0900, Paul Mundt wrote: > 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.
That looks fine. I wonder if I can assume that such tests, that are the same between x86 and Sh, can apply to every archs, in which case I could move that to the generic code.
> > 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>
Great, I'll then merge this fix to the appropriate patch and add the appropriate tags.
Thanks Paul!
> > --- > > 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;
|  |