From 723cada63f8d8ce8185fd628bbb5be49708a202f Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 25 Jul 2008 19:45:50 -0700 Subject: [PATCH] --- yaml --- r: 106213 b: refs/heads/master c: fa8e26ccd485216fc45c8c2dd1ec3b7ef1a0a2f8 h: refs/heads/master i: 106211: e579f675f7e7d02712b8f964d025a356c7c9f040 v: v3 --- [refs] | 2 +- trunk/include/linux/tracehook.h | 15 +++++++++++++++ trunk/mm/nommu.c | 4 ++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 9f67c5f6e0f9..3cc03f7b7af7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0d094efeb1e98010c6b99923f1eb7e17bf1e3a74 +refs/heads/master: fa8e26ccd485216fc45c8c2dd1ec3b7ef1a0a2f8 diff --git a/trunk/include/linux/tracehook.h b/trunk/include/linux/tracehook.h index 6468ca0fe69b..e113e09b0341 100644 --- a/trunk/include/linux/tracehook.h +++ b/trunk/include/linux/tracehook.h @@ -51,6 +51,21 @@ #include struct linux_binprm; +/** + * tracehook_expect_breakpoints - guess if task memory might be touched + * @task: current task, making a new mapping + * + * Return nonzero if @task is expected to want breakpoint insertion in + * its memory at some point. A zero return is no guarantee it won't + * be done, but this is a hint that it's known to be likely. + * + * May be called with @task->mm->mmap_sem held for writing. + */ +static inline int tracehook_expect_breakpoints(struct task_struct *task) +{ + return (task_ptrace(task) & PT_PTRACED) != 0; +} + /** * tracehook_unsafe_exec - check for exec declared unsafe due to tracing * @task: current task doing exec diff --git a/trunk/mm/nommu.c b/trunk/mm/nommu.c index 4462b6a3fcb9..5edccd9c9218 100644 --- a/trunk/mm/nommu.c +++ b/trunk/mm/nommu.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include @@ -745,7 +745,7 @@ static unsigned long determine_vm_flags(struct file *file, * it's being traced - otherwise breakpoints set in it may interfere * with another untraced process */ - if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED)) + if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current)) vm_flags &= ~VM_MAYSHARE; return vm_flags;