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>
This commit is contained in:
parent
0d094efeb1
commit
fa8e26ccd4
2 changed files with 17 additions and 2 deletions
|
@ -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 @@
|
||||||
#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,
|
||||||
* 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;
|
||||||
|
|
Loading…
Reference in a new issue