Commit fa8e26ccd485216fc45c8c2dd1ec3b7ef1a0a2f8

Authored by Roland McGrath
Committed by Linus Torvalds
1 parent 0d094efeb1

tracehook: tracehook_expect_breakpoints

This adds tracehook_expect_breakpoints() as a formal hook for the nommu
code to use for its, "Is text-poking likely?" check at mmap time.  This
names the actual semantics the code means to test, and documents it.

Signed-off-by: Roland McGrath <roland@redhat.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Reviewed-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 17 additions and 2 deletions Side-by-side Diff

include/linux/tracehook.h
... ... @@ -52,6 +52,21 @@
52 52 struct linux_binprm;
53 53  
54 54 /**
  55 + * tracehook_expect_breakpoints - guess if task memory might be touched
  56 + * @task: current task, making a new mapping
  57 + *
  58 + * Return nonzero if @task is expected to want breakpoint insertion in
  59 + * its memory at some point. A zero return is no guarantee it won't
  60 + * be done, but this is a hint that it's known to be likely.
  61 + *
  62 + * May be called with @task->mm->mmap_sem held for writing.
  63 + */
  64 +static inline int tracehook_expect_breakpoints(struct task_struct *task)
  65 +{
  66 + return (task_ptrace(task) & PT_PTRACED) != 0;
  67 +}
  68 +
  69 +/**
55 70 * tracehook_unsafe_exec - check for exec declared unsafe due to tracing
56 71 * @task: current task doing exec
57 72 *
... ... @@ -22,7 +22,7 @@
22 22 #include <linux/pagemap.h>
23 23 #include <linux/slab.h>
24 24 #include <linux/vmalloc.h>
25   -#include <linux/ptrace.h>
  25 +#include <linux/tracehook.h>
26 26 #include <linux/blkdev.h>
27 27 #include <linux/backing-dev.h>
28 28 #include <linux/mount.h>
... ... @@ -745,7 +745,7 @@
745 745 * it's being traced - otherwise breakpoints set in it may interfere
746 746 * with another untraced process
747 747 */
748   - if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED))
  748 + if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current))
749 749 vm_flags &= ~VM_MAYSHARE;
750 750  
751 751 return vm_flags;