mirror of
https://github.com/torvalds/linux.git
synced 2024-11-17 01:22:07 +00:00
kprobes: Disabling optimized kprobes for entry text section
You can crash the kernel (with root/admin privileges) using kprobe tracer by running: echo "p system_call_after_swapgs" > ./kprobe_events echo 1 > ./events/kprobes/enable The reason is that at the system_call_after_swapgs label, the kernel stack is not set up. If optimized kprobes are enabled, the user space stack is being used in this case (see optimized kprobe template) and this might result in a crash. There are several places like this over the entry code (entry_$BIT). As it seems there's no any reasonable/maintainable way to disable only those places where the stack is not ready, I switched off the whole entry code from kprobe optimizing. Signed-off-by: Jiri Olsa <jolsa@redhat.com> Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: acme@redhat.com Cc: fweisbec@gmail.com Cc: ananth@in.ibm.com Cc: davem@davemloft.net Cc: a.p.zijlstra@chello.nl Cc: eric.dumazet@gmail.com Cc: 2nddept-manager@sdl.hitachi.co.jp LKML-Reference: <1298298313-5980-3-git-send-email-jolsa@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
ea7145477a
commit
2a8247a260
@ -1276,6 +1276,14 @@ static int __kprobes can_optimize(unsigned long paddr)
|
||||
if (!kallsyms_lookup_size_offset(paddr, &size, &offset))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Do not optimize in the entry code due to the unstable
|
||||
* stack handling.
|
||||
*/
|
||||
if ((paddr >= (unsigned long )__entry_text_start) &&
|
||||
(paddr < (unsigned long )__entry_text_end))
|
||||
return 0;
|
||||
|
||||
/* Check there is enough space for a relative jump. */
|
||||
if (size - offset < RELATIVEJUMP_SIZE)
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user