diff options
author | Roland McGrath <roland@redhat.com> | 2008-07-25 22:45:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-26 15:00:08 -0400 |
commit | 6341c393fcc37d58727865f1ee2f65e632e9d4f0 (patch) | |
tree | 6e88d928e17f663b225884e81877a7a069d7c514 /fs/exec.c | |
parent | 88ac2921a71f788ed693bcd44731dd6bc1994640 (diff) |
tracehook: exec
This moves all the ptrace hooks related to exec into tracehook.h inlines.
This also lifts the calls for tracing out of the binfmt load_binary hooks
into search_binary_handler() after it calls into the binfmt module. This
change has no effect, since all the binfmt modules' load_binary functions
did the call at the end on success, and now search_binary_handler() does
it immediately after return if successful. We consolidate the repeated
code, and binfmt modules no longer need to import ptrace_notify().
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>
Diffstat (limited to 'fs/exec.c')
-rw-r--r-- | fs/exec.c | 12 |
1 files changed, 4 insertions, 8 deletions
@@ -42,13 +42,13 @@ | |||
42 | #include <linux/module.h> | 42 | #include <linux/module.h> |
43 | #include <linux/namei.h> | 43 | #include <linux/namei.h> |
44 | #include <linux/proc_fs.h> | 44 | #include <linux/proc_fs.h> |
45 | #include <linux/ptrace.h> | ||
46 | #include <linux/mount.h> | 45 | #include <linux/mount.h> |
47 | #include <linux/security.h> | 46 | #include <linux/security.h> |
48 | #include <linux/syscalls.h> | 47 | #include <linux/syscalls.h> |
49 | #include <linux/tsacct_kern.h> | 48 | #include <linux/tsacct_kern.h> |
50 | #include <linux/cn_proc.h> | 49 | #include <linux/cn_proc.h> |
51 | #include <linux/audit.h> | 50 | #include <linux/audit.h> |
51 | #include <linux/tracehook.h> | ||
52 | 52 | ||
53 | #include <asm/uaccess.h> | 53 | #include <asm/uaccess.h> |
54 | #include <asm/mmu_context.h> | 54 | #include <asm/mmu_context.h> |
@@ -1071,13 +1071,8 @@ EXPORT_SYMBOL(prepare_binprm); | |||
1071 | 1071 | ||
1072 | static int unsafe_exec(struct task_struct *p) | 1072 | static int unsafe_exec(struct task_struct *p) |
1073 | { | 1073 | { |
1074 | int unsafe = 0; | 1074 | int unsafe = tracehook_unsafe_exec(p); |
1075 | if (p->ptrace & PT_PTRACED) { | 1075 | |
1076 | if (p->ptrace & PT_PTRACE_CAP) | ||
1077 | unsafe |= LSM_UNSAFE_PTRACE_CAP; | ||
1078 | else | ||
1079 | unsafe |= LSM_UNSAFE_PTRACE; | ||
1080 | } | ||
1081 | if (atomic_read(&p->fs->count) > 1 || | 1076 | if (atomic_read(&p->fs->count) > 1 || |
1082 | atomic_read(&p->files->count) > 1 || | 1077 | atomic_read(&p->files->count) > 1 || |
1083 | atomic_read(&p->sighand->count) > 1) | 1078 | atomic_read(&p->sighand->count) > 1) |
@@ -1214,6 +1209,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) | |||
1214 | read_unlock(&binfmt_lock); | 1209 | read_unlock(&binfmt_lock); |
1215 | retval = fn(bprm, regs); | 1210 | retval = fn(bprm, regs); |
1216 | if (retval >= 0) { | 1211 | if (retval >= 0) { |
1212 | tracehook_report_exec(fmt, bprm, regs); | ||
1217 | put_binfmt(fmt); | 1213 | put_binfmt(fmt); |
1218 | allow_write_access(bprm->file); | 1214 | allow_write_access(bprm->file); |
1219 | if (bprm->file) | 1215 | if (bprm->file) |