Commit fa8e26cc authored by Roland McGrath's avatar Roland McGrath Committed by Linus Torvalds

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: default avatarRoland McGrath <roland@redhat.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Reviewed-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0d094efe
...@@ -51,6 +51,21 @@ ...@@ -51,6 +51,21 @@
#include <linux/security.h> #include <linux/security.h>
struct linux_binprm; 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 * tracehook_unsafe_exec - check for exec declared unsafe due to tracing
* @task: current task doing exec * @task: current task doing exec
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/ptrace.h> #include <linux/tracehook.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/backing-dev.h> #include <linux/backing-dev.h>
#include <linux/mount.h> #include <linux/mount.h>
...@@ -745,7 +745,7 @@ static unsigned long determine_vm_flags(struct file *file, ...@@ -745,7 +745,7 @@ static unsigned long determine_vm_flags(struct file *file,
* it's being traced - otherwise breakpoints set in it may interfere * it's being traced - otherwise breakpoints set in it may interfere
* with another untraced process * with another untraced process
*/ */
if ((flags & MAP_PRIVATE) && (current->ptrace & PT_PTRACED)) if ((flags & MAP_PRIVATE) && tracehook_expect_breakpoints(current))
vm_flags &= ~VM_MAYSHARE; vm_flags &= ~VM_MAYSHARE;
return vm_flags; return vm_flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment