linux/arch/sh/kernel
Frederic Weisbecker b2812d031d hw-breakpoints: Change/Enforce some breakpoints policies
The current policies of breakpoints in x86 and SH are the following:

- task bound breakpoints can only break on userspace addresses
- cpu wide breakpoints can only break on kernel addresses

The former rule prevents ptrace breakpoints to be set to trigger on
kernel addresses, which is good. But as a side effect, we can't
breakpoint on kernel addresses for task bound breakpoints.

The latter rule simply makes no sense, there is no reason why we
can't set breakpoints on userspace while performing cpu bound
profiles.

We want the following new policies:

- task bound breakpoint can set userspace address breakpoints, with
no particular privilege required.
- task bound breakpoints can set kernelspace address breakpoints but
must be privileged to do that.
- cpu bound breakpoints can do what they want as they are privileged
already.

To implement these new policies, this patch checks if we are dealing
with a kernel address breakpoint, if so and if the exclude_kernel
parameter is set, we tell the user that the breakpoint is invalid,
which makes a good generic ptrace protection.
If we don't have exclude_kernel, ensure the user has the right
privileges as kernel breakpoints are quite sensitive (risk of
trap recursion attacks and global performance impacts).

[ Paul Mundt: keep addr space check for sh signal delivery and fix
  double function declaration]

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Cc: K. Prasad <prasad@linux.vnet.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Jason Wessel <jason.wessel@windriver.com>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-05-01 04:32:10 +02:00
..
cpu include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
vsyscall include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
.gitignore
asm-offsets.c sh: Add R-standby sleep mode support 2009-10-30 14:38:45 +09:00
cpufreq.c arch/sh/kernel: Use set_cpus_allowed_ptr 2010-03-29 11:40:37 +09:00
crash_dump.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
debugtraps.S sh: kgdb: Rework breakpoint handling on top of notifier chain. 2009-12-22 12:44:14 +09:00
disassemble.c sh: Add a simple code dumper for SUPERH32 show_regs(). 2008-12-22 18:43:49 +09:00
dma-nommu.c sh: Revamp PCI DMA coherence Kconfig bits. 2009-10-27 10:35:02 +09:00
dumpstack.c sh: flag the default unwinder as reliable. 2009-08-15 01:09:03 +09:00
dwarf.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
entry-common.S sh: Correct the offset of the return address in ret_from_exception 2010-02-08 10:46:46 +09:00
ftrace.c tracing: Unify arch_syscall_addr() implementations 2010-02-17 13:07:21 +01:00
head_32.S sh: Merge legacy and dynamic PMB modes. 2010-02-18 18:13:51 +09:00
head_64.S sh64: Fix up early serial fixmap. 2010-01-12 15:22:26 +09:00
hw_breakpoint.c hw-breakpoints: Change/Enforce some breakpoints policies 2010-05-01 04:32:10 +02:00
idle.c sh: Tidy up a couple of section mismatches. 2010-03-23 17:06:47 +09:00
init_task.c Use new __init_task_data macro in arch init_task.c files. 2009-09-21 06:27:08 +02:00
io_generic.c sh: Use the generic I/O port base for slowdown. 2009-11-12 16:36:26 +09:00
io_trapped.c sh: Optimize runtime disabling of trapped I/O. 2010-01-27 21:56:57 +09:00
io.c sh: Optimise memcpy_to/fromio for SH4 2009-08-24 17:35:07 +09:00
irq_32.c sh: Annotate irq functions with "notrace" 2009-10-27 07:37:10 +09:00
irq_64.c sh: Annotate irq functions with "notrace" 2009-10-27 07:37:10 +09:00
irq.c genirq: Convert irq_desc.lock to raw_spinlock 2009-12-14 23:55:33 +01:00
kgdb.c sh: kgdb: Rework breakpoint handling on top of notifier chain. 2009-12-22 12:44:14 +09:00
kprobes.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
localtimer.c sh: Fix up clockevents broadcasting. 2009-08-19 18:00:03 +09:00
machine_kexec.c sh: machine_ops based reboot support. 2010-01-20 16:42:52 +09:00
machvec.c sh: Use the generic I/O port base for slowdown. 2009-11-12 16:36:26 +09:00
Makefile sh: machine_ops based reboot support. 2010-01-20 16:42:52 +09:00
module.c sh: Tidy up the dwarf module helpers. 2009-10-13 13:32:19 +09:00
nmi_debug.c sh: nmi_debug support. 2009-09-01 17:38:32 +09:00
perf_callchain.c perf: Fix inconsistency between IP and callchain sampling 2010-01-28 14:31:20 +01:00
perf_event.c sh: Tidy up a couple of section mismatches. 2010-03-23 17:06:47 +09:00
process_32.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
process_64.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
process.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ptrace_32.c hw-breakpoints: Tag ptrace breakpoint as exclude_kernel 2010-05-01 04:32:07 +02:00
ptrace_64.c Merge branch 'sh/stable-updates' 2010-02-15 14:49:37 +09:00
reboot.c sh: machine_ops based reboot support. 2010-01-20 16:42:52 +09:00
relocate_kernel.S sh: add kexec jump support 2009-03-18 18:57:43 +09:00
return_address.c sh: export return_address() symbol. 2010-04-02 16:02:33 +09:00
setup.c sh: establish PMB mappings for NUMA nodes. 2010-03-03 13:16:31 +09:00
sh_bios.c sh: sh_bios detection. 2010-01-12 18:42:52 +09:00
sh_ksyms_32.c sh: Clean up more superfluous symbol exports. 2009-10-27 11:51:19 +09:00
sh_ksyms_64.c sh: Clean up more superfluous symbol exports. 2009-10-27 11:51:19 +09:00
signal_32.c sh: Mass ctrl_in/outX to __raw_read/writeX conversion. 2010-01-26 12:58:40 +09:00
signal_64.c Merge branch 'sh/stable-updates' 2010-02-15 14:49:37 +09:00
smp.c sh: Enable the mmu in start_secondary() 2010-03-29 12:11:51 +09:00
stacktrace.c sh: stacktrace: Properly terminate the trace entry buffer. 2009-08-15 01:11:37 +09:00
swsusp.c sh: hibernation support 2009-03-10 12:55:40 +09:00
sys_sh32.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
sys_sh64.c headers: utsname.h redux 2009-09-23 18:13:10 -07:00
sys_sh.c Add generic sys_olduname() 2010-03-12 15:52:32 -08:00
syscalls_32.S sh: unwire sys_recvmmsg. 2010-01-19 17:00:06 +09:00
syscalls_64.S sh64: wire up sys_accept4. 2010-01-19 17:00:31 +09:00
time.c sh: Convert sh to use read/update_persistent_clock 2010-03-05 02:04:38 +09:00
topology.c sh: Support SCHED_MC for SH-X3 multi-cores. 2009-10-16 18:00:02 +09:00
traps_32.c sh: Setup boot CPU VBR early to enable early page faults. 2010-02-17 12:33:22 +09:00
traps_64.c sh64: Fix up the build for the thread_xstate changes. 2010-01-19 15:40:03 +09:00
traps.c sh: Mass ctrl_in/outX to __raw_read/writeX conversion. 2010-01-26 12:58:40 +09:00
unwinder.c sh: unwinder: Use a special bug flag for unwinder traps. 2009-08-22 05:28:25 +09:00
vmlinux.lds.S sh: Kill off some superfluous legacy PMB special casing. 2010-02-16 21:43:38 +09:00