diff options
author | Richard Guy Briggs <rgb@redhat.com> | 2013-12-10 22:10:41 -0500 |
---|---|---|
committer | Eric Paris <eparis@redhat.com> | 2014-03-20 10:11:55 -0400 |
commit | c92cdeb45eea38515e82187f48c2e4f435fb4e25 (patch) | |
tree | f3eedc38f7e5b6012d053e6c05ad2df3975f4c08 /kernel | |
parent | ad36d28293936b03d6b7996e9d6aadfd73c0eb08 (diff) |
audit: convert PPIDs to the inital PID namespace.
sys_getppid() returns the parent pid of the current process in its own pid
namespace. Since audit filters are based in the init pid namespace, a process
could avoid a filter or trigger an unintended one by being in an alternate pid
namespace or log meaningless information.
Switch to task_ppid_nr() for PPIDs to anchor all audit filters in the
init_pid_ns.
(informed by ebiederman's 6c621b7e)
Cc: stable@vger.kernel.org
Cc: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Richard Guy Briggs <rgb@redhat.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/audit.c | 4 | ||||
-rw-r--r-- | kernel/auditsc.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 7b44bd47759c..e1e1b2137048 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -1819,10 +1819,10 @@ void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk) | |||
1819 | spin_unlock_irq(&tsk->sighand->siglock); | 1819 | spin_unlock_irq(&tsk->sighand->siglock); |
1820 | 1820 | ||
1821 | audit_log_format(ab, | 1821 | audit_log_format(ab, |
1822 | " ppid=%ld pid=%d auid=%u uid=%u gid=%u" | 1822 | " ppid=%d pid=%d auid=%u uid=%u gid=%u" |
1823 | " euid=%u suid=%u fsuid=%u" | 1823 | " euid=%u suid=%u fsuid=%u" |
1824 | " egid=%u sgid=%u fsgid=%u tty=%s ses=%u", | 1824 | " egid=%u sgid=%u fsgid=%u tty=%s ses=%u", |
1825 | sys_getppid(), | 1825 | task_ppid_nr(tsk), |
1826 | tsk->pid, | 1826 | tsk->pid, |
1827 | from_kuid(&init_user_ns, audit_get_loginuid(tsk)), | 1827 | from_kuid(&init_user_ns, audit_get_loginuid(tsk)), |
1828 | from_kuid(&init_user_ns, cred->uid), | 1828 | from_kuid(&init_user_ns, cred->uid), |
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 57bf178ca7d5..a6cf7ab56e61 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -465,7 +465,7 @@ static int audit_filter_rules(struct task_struct *tsk, | |||
465 | case AUDIT_PPID: | 465 | case AUDIT_PPID: |
466 | if (ctx) { | 466 | if (ctx) { |
467 | if (!ctx->ppid) | 467 | if (!ctx->ppid) |
468 | ctx->ppid = sys_getppid(); | 468 | ctx->ppid = task_ppid_nr(tsk); |
469 | result = audit_comparator(ctx->ppid, f->op, f->val); | 469 | result = audit_comparator(ctx->ppid, f->op, f->val); |
470 | } | 470 | } |
471 | break; | 471 | break; |