diff options
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 cf5bc2f5f9c3..de8468050afa 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -1548,6 +1548,23 @@ void audit_syscall_entry(int arch, int major, | |||
1548 | context->ppid = 0; | 1548 | context->ppid = 0; |
1549 | } | 1549 | } |
1550 | 1550 | ||
1551 | void audit_finish_fork(struct task_struct *child) | ||
1552 | { | ||
1553 | struct audit_context *ctx = current->audit_context; | ||
1554 | struct audit_context *p = child->audit_context; | ||
1555 | if (!p || !ctx || !ctx->auditable) | ||
1556 | return; | ||
1557 | p->arch = ctx->arch; | ||
1558 | p->major = ctx->major; | ||
1559 | memcpy(p->argv, ctx->argv, sizeof(ctx->argv)); | ||
1560 | p->ctime = ctx->ctime; | ||
1561 | p->dummy = ctx->dummy; | ||
1562 | p->auditable = ctx->auditable; | ||
1563 | p->in_syscall = ctx->in_syscall; | ||
1564 | p->filterkey = kstrdup(ctx->filterkey, GFP_KERNEL); | ||
1565 | p->ppid = current->pid; | ||
1566 | } | ||
1567 | |||
1551 | /** | 1568 | /** |
1552 | * audit_syscall_exit - deallocate audit context after a system call | 1569 | * audit_syscall_exit - deallocate audit context after a system call |
1553 | * @tsk: task being audited | 1570 | * @tsk: task being audited |
diff --git a/kernel/fork.c b/kernel/fork.c index 2a372a0e206f..8d6a7dd9282b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1398,6 +1398,7 @@ long do_fork(unsigned long clone_flags, | |||
1398 | init_completion(&vfork); | 1398 | init_completion(&vfork); |
1399 | } | 1399 | } |
1400 | 1400 | ||
1401 | audit_finish_fork(p); | ||
1401 | tracehook_report_clone(trace, regs, clone_flags, nr, p); | 1402 | tracehook_report_clone(trace, regs, clone_flags, nr, p); |
1402 | 1403 | ||
1403 | /* | 1404 | /* |