diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2008-11-12 18:37:41 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-12-09 02:27:38 -0500 |
commit | a64e64944f4b8ce3288519555dbaa0232414b8ac (patch) | |
tree | 6b37f5444c49379580b6b4fead84a75ca474d0ab /kernel | |
parent | a3f07114e3359fb98683069ae397220e8992a24a (diff) | |
download | op-kernel-dev-a64e64944f4b8ce3288519555dbaa0232414b8ac.zip op-kernel-dev-a64e64944f4b8ce3288519555dbaa0232414b8ac.tar.gz |
[PATCH] return records for fork() both to child and parent
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/auditsc.c | 17 | ||||
-rw-r--r-- | kernel/fork.c | 1 |
2 files changed, 18 insertions, 0 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index cf5bc2f..de84680 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c @@ -1548,6 +1548,23 @@ void audit_syscall_entry(int arch, int major, context->ppid = 0; } +void audit_finish_fork(struct task_struct *child) +{ + struct audit_context *ctx = current->audit_context; + struct audit_context *p = child->audit_context; + if (!p || !ctx || !ctx->auditable) + return; + p->arch = ctx->arch; + p->major = ctx->major; + memcpy(p->argv, ctx->argv, sizeof(ctx->argv)); + p->ctime = ctx->ctime; + p->dummy = ctx->dummy; + p->auditable = ctx->auditable; + p->in_syscall = ctx->in_syscall; + p->filterkey = kstrdup(ctx->filterkey, GFP_KERNEL); + p->ppid = current->pid; +} + /** * audit_syscall_exit - deallocate audit context after a system call * @tsk: task being audited diff --git a/kernel/fork.c b/kernel/fork.c index 2a372a0..8d6a7dd 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1398,6 +1398,7 @@ long do_fork(unsigned long clone_flags, init_completion(&vfork); } + audit_finish_fork(p); tracehook_report_clone(trace, regs, clone_flags, nr, p); /* |