From: Oleg Nesterov <oleg@redhat.com>
To: Richard Guy Briggs <rgb@redhat.com>
Cc: linux-audit@redhat.com, linux-kernel@vger.kernel.org,
Eric Paris <eparis@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
"Eric W. Biederman" <ebiederm@xmission.com>
Subject: Re: [PATCH 3/5] audit: store audit_pid as a struct pid pointer
Date: Mon, 30 Dec 2013 18:51:03 +0100 [thread overview]
Message-ID: <20131230175103.GC2457@redhat.com> (raw)
In-Reply-To: <12b8a0d4d2817557eab7a84da3558388a5e5afcf.1387834776.git.rgb@redhat.com>
On 12/23, Richard Guy Briggs wrote:
>
> - PID will be reported in the relevant querying PID namespace.
>
> - Refuse to change the current audit_pid if the new value does not
> point to an existing process.
>
> - Refuse to set the current audit_pid if the new value is not its own PID
> (unless it is being unset).
I started to read the changelog only after I failed to understand the
patch. And it looks confusing too.
"Refuse to set the current audit_pid if the new value is not its own PID",
OK, but if the new value is the caller's pid then it should obviously
point to the existing process, current?
> - Convert audit_pid into the initial pid namespace for reports
I can't apply this patch (and the previous one) due to multiple rejects,
I guess it depends on other changes?
In any case, this patch looks wrong.
> @@ -412,9 +412,11 @@ static void kauditd_send_skb(struct sk_buff *skb)
> BUG_ON(err != -ECONNREFUSED); /* Shouldn't happen */
> if (audit_pid) {
> pr_err("audit: *NO* daemon at audit_pid=%d\n",
> - audit_pid);
> + pid_nr(audit_pid));
> audit_log_lost("auditd disappeared\n");
> - audit_pid = 0;
> + put_pid(audit_pid);
But this can actually free this pid. Why it is safe to use it elsewhere?
> + audit_pid = NULL;
This also means that every "if (audit_pid)" is racy.
> @@ -814,12 +816,26 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
> return err;
> }
> if (s.mask & AUDIT_STATUS_PID) {
> - int new_pid = s.pid;
> -
> - if ((!new_pid) && (task_tgid_vnr(current) != audit_pid))
> + struct pid *new_pid = find_get_pid(s.pid);
> + if (s.pid && !new_pid)
> + return -ESRCH;
can't understand... find_get_pid(s.pid) is pointless if s.pid == 0 ?
struct pid *new_pid = NULL;
if (new_pid) {
new_pid = find_get_pid(s.pid);
if (!new_pid)
return -ESRCH;
}
looks more understandable.
> + /* check that non-zero pid it is trying to set is its
> + * own*/
> + if (s.pid && (s.pid != task_pid_vnr(current)))
again, this looks a bit confusing and suboptimal. Imho it would be better
to add
if (new_pid != task_tgid(current))
into the "if (s.pid)" above. Hmm, actually task_pid_vnr() above looks
simply wrong, we need tgid or I am totally confused.
OTOH, if we require s.pid == task_pid_vnr(current), then why do we need
find_pid() at all?
> + return -EPERM;
this lacks put_pid(new_pid).
> + /* check that it isn't orphaning another process */
> + if ((!new_pid) &&
> + (task_tgid_vnr(current) != pid_vnr(audit_pid)))
> return -EACCES;
and this can go into the "else" branch.
And I can't understand the "it isn't orphaning another process" logic...
OK, what if s.pid == 0 and audit_pid == NULL, should we fail in this case?
And I do not see how this matches "Refuse to set the current audit_pid
if the new value is not its own PID" from the changelog.
> +
> audit_pid = new_pid;
Another leak, it seems.
> @@ -1331,7 +1347,8 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
> return NULL;
>
> if (gfp_mask & __GFP_WAIT) {
> - if (audit_pid && audit_pid == current->pid)
> + if (pid_nr(audit_pid) == task_pid_nr(current))
So is this audit_pid tid or tgid? Its usage looks totally confusing.
Anyway,
if (audit_pid == task_pid(current))
(or probably task_tgid) looks much better.
> + //if (pid_task(audit_pid, PIDTYPE_PID) == current)
in this case you need to update Documentation/CodingStyle ;)
Oleg.
next prev parent reply other threads:[~2013-12-30 17:51 UTC|newest]
Thread overview: 147+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-20 21:31 [PATCH 00/12] RFC: steps to make audit pid namespace-safe Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 01/12] audit: Kill the unused struct audit_aux_data_capset Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 02/12] audit: fix netlink portid naming and types Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 03/12] pid: get ppid pid_t of task in init_pid_ns safely Richard Guy Briggs
2013-08-27 17:21 ` Oleg Nesterov
2013-08-30 19:56 ` Richard Guy Briggs
2013-08-30 19:56 ` Richard Guy Briggs
2013-08-30 20:37 ` John Johansen
2013-08-30 22:41 ` [PATCH 1/3] apparmor: fix capability to not use the current task, during reporting John Johansen
2013-08-30 22:42 ` [PATCH 2/3] apparmor: remove tsk field from the apparmor_audit_struct John Johansen
2013-08-30 22:43 ` [PATCH 03/3] apparmor: remove parent task info from audit logging John Johansen
2013-09-03 18:31 ` [PATCH 03/12] pid: get ppid pid_t of task in init_pid_ns safely Richard Guy Briggs
2013-09-03 18:31 ` Richard Guy Briggs
2013-12-11 14:47 ` Richard Guy Briggs
2013-12-11 16:44 ` John Johansen
2013-12-11 17:19 ` Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 04/12] audit: convert PPIDs to the inital PID namespace Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 05/12] pid: get pid_t of task in init_pid_ns correctly Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 06/12] audit: Simplify and correct audit_log_capset Richard Guy Briggs
2013-08-20 21:31 ` [PATCH 07/12] audit: store audit_pid as a struct pid pointer Richard Guy Briggs
2013-08-20 21:32 ` [PATCH 08/12] audit: anchor all pid references in the initial pid namespace Richard Guy Briggs
2013-08-20 21:32 ` [PATCH 09/12] pid: modify task_pid_nr to work without task->pid Richard Guy Briggs
2013-12-16 21:03 ` [PATCH] pid: change task_struct::pid to read-only Richard Guy Briggs
2013-12-17 9:58 ` Peter Zijlstra
2013-12-20 4:48 ` Richard Guy Briggs
2013-12-20 8:58 ` Peter Zijlstra
2013-12-20 14:04 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 0/7][RFC] pid: changes to support audit Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 1/7] pid: change task_struct::pid to read-only Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 2/7] compiler: CONST_CAST makes writing const vars easier and obvious Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 3/7] pid: use the CONST_CAST macro instead to write to const task_struct::pid Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 4/7] pid: modify task_tgid_nr to work without task->tgid Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-02-20 18:35 ` Oleg Nesterov
2014-02-21 20:47 ` Richard Guy Briggs
2014-02-21 20:47 ` Richard Guy Briggs
2014-02-24 18:40 ` Oleg Nesterov
2014-02-24 18:40 ` Oleg Nesterov
2014-01-23 19:32 ` [PATCH 5/7] pid: rewrite task helper function is_global_init() avoiding task->pid Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-02-20 18:39 ` Oleg Nesterov
2014-02-20 18:39 ` Oleg Nesterov
2014-02-21 16:10 ` Richard Guy Briggs
2014-02-21 16:10 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 6/7] pid: mark struct task const in helper functions Richard Guy Briggs
2014-01-23 19:32 ` Richard Guy Briggs
2014-01-23 19:32 ` [PATCH 7/7] pid: get pid_t ppid of task in init_pid_ns Richard Guy Briggs
2014-02-20 19:01 ` Oleg Nesterov
2014-02-20 19:01 ` Oleg Nesterov
2014-02-21 18:10 ` Richard Guy Briggs
2014-02-21 18:10 ` Richard Guy Briggs
2014-02-24 18:32 ` Oleg Nesterov
2014-02-24 18:32 ` Oleg Nesterov
2014-03-17 20:14 ` Tony Luck
2014-03-17 20:15 ` Eric Paris
2014-01-23 21:25 ` [PATCH 0/7][RFC] pid: changes to support audit Peter Zijlstra
2014-01-24 6:14 ` Richard Guy Briggs
2014-01-24 6:14 ` Richard Guy Briggs
2014-01-24 8:52 ` Peter Zijlstra
2014-01-24 14:31 ` Richard Guy Briggs
2014-01-24 14:31 ` Richard Guy Briggs
2014-02-19 16:18 ` Richard Guy Briggs
2014-02-19 17:47 ` Oleg Nesterov
2014-02-19 18:15 ` Richard Guy Briggs
2014-02-19 18:15 ` Richard Guy Briggs
2014-02-20 19:08 ` Oleg Nesterov
2013-12-20 4:48 ` [PATCH] pid: change task_struct::pid to read-only Richard Guy Briggs
2013-12-17 9:59 ` Peter Zijlstra
2013-12-17 15:36 ` Oleg Nesterov
2013-12-17 15:40 ` Oleg Nesterov
2013-12-20 19:01 ` Oleg Nesterov
2013-12-20 20:19 ` Richard Guy Briggs
2013-12-20 20:19 ` Richard Guy Briggs
2013-12-20 21:33 ` Peter Zijlstra
2013-12-22 16:03 ` Oleg Nesterov
2014-01-23 19:24 ` Richard Guy Briggs
2014-01-23 19:24 ` Richard Guy Briggs
2013-08-20 21:32 ` [PATCH 10/12] pid: modify task_tgid_nr to work without task->tgid Richard Guy Briggs
2013-08-20 21:32 ` [PATCH 11/12] pid: rewrite task helper functions avoiding task->pid and task->tgid Richard Guy Briggs
2013-08-22 19:08 ` Oleg Nesterov
2013-08-26 22:07 ` Richard Guy Briggs
2013-08-26 22:07 ` Richard Guy Briggs
2013-08-27 16:15 ` Oleg Nesterov
2013-12-16 17:35 ` Richard Guy Briggs
2013-12-16 17:35 ` Richard Guy Briggs
2013-12-16 21:05 ` Oleg Nesterov
2013-12-16 22:20 ` Richard Guy Briggs
2013-12-16 22:20 ` Richard Guy Briggs
2013-12-17 9:34 ` Peter Zijlstra
2013-12-17 9:48 ` Peter Zijlstra
2013-12-20 4:54 ` Richard Guy Briggs
2013-12-20 4:54 ` Richard Guy Briggs
2013-08-22 20:05 ` Peter Zijlstra
2013-08-22 21:43 ` Richard Guy Briggs
2013-08-22 21:43 ` Richard Guy Briggs
2013-08-23 6:36 ` Peter Zijlstra
2013-08-27 2:37 ` Richard Guy Briggs
2013-08-27 2:37 ` Richard Guy Briggs
2013-08-27 12:11 ` Peter Zijlstra
2013-08-27 21:35 ` Eric W. Biederman
2013-08-28 8:16 ` Peter Zijlstra
2013-08-23 19:28 ` Oleg Nesterov
2013-08-27 3:04 ` Richard Guy Briggs
2013-08-27 3:04 ` Richard Guy Briggs
2013-08-27 17:11 ` Oleg Nesterov
2013-08-30 19:06 ` audit looks unmaintained? [was: Re: [PATCH 11/12] pid: rewrite task helper functions avoiding task->pid and task->tgid] Richard Guy Briggs
2013-08-30 19:54 ` Steve Grubb
2013-09-08 15:54 ` Oleg Nesterov
2013-09-10 17:20 ` Oleg Nesterov
2013-09-13 18:42 ` Steve Grubb
2013-09-14 18:10 ` Oleg Nesterov
2013-09-13 18:28 ` Steve Grubb
2013-09-14 18:08 ` Oleg Nesterov
2013-08-20 21:32 ` [PATCH 12/12] pid: mark struct task const in helper functions Richard Guy Briggs
2013-12-23 22:27 ` [PATCH 0/5][RFC][v2] steps to make audit pid namespace-safe Richard Guy Briggs
2013-12-23 22:27 ` Richard Guy Briggs
2013-12-23 22:27 ` [PATCH 1/5] pid: get pid_t ppid of task in init_pid_ns Richard Guy Briggs
2013-12-23 22:27 ` Richard Guy Briggs
2013-12-30 17:04 ` Oleg Nesterov
2013-12-23 22:27 ` [PATCH 2/5] audit: convert PPIDs to the inital PID namespace Richard Guy Briggs
2013-12-30 17:07 ` Oleg Nesterov
2013-12-23 22:27 ` [PATCH 3/5] audit: store audit_pid as a struct pid pointer Richard Guy Briggs
2013-12-23 22:27 ` Richard Guy Briggs
2013-12-30 17:51 ` Oleg Nesterov [this message]
2014-01-21 23:37 ` Richard Guy Briggs
2013-12-23 22:27 ` [PATCH 4/5] audit: anchor all pid references in the initial pid namespace Richard Guy Briggs
2013-12-23 22:27 ` Richard Guy Briggs
2013-12-30 18:06 ` Oleg Nesterov
2014-02-19 20:28 ` Richard Guy Briggs
2014-02-19 20:28 ` Richard Guy Briggs
2013-12-23 22:27 ` [PATCH 5/5] audit: allow user processes to log from another PID namespace Richard Guy Briggs
2013-12-23 22:27 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 0/5][RFC][v3] steps to make audit pid namespace-safe Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 1/5] pid: get pid_t ppid of task in init_pid_ns Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 2/5] audit: convert PPIDs to the inital PID namespace Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 3/5] audit: store audit_pid as a struct pid pointer Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 4/5] audit: anchor all pid references in the initial pid namespace Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
2014-02-19 20:57 ` [PATCH 5/5] audit: allow user processes to log from another PID namespace Richard Guy Briggs
2014-02-19 20:57 ` Richard Guy Briggs
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131230175103.GC2457@redhat.com \
--to=oleg@redhat.com \
--cc=ebiederm@xmission.com \
--cc=eparis@redhat.com \
--cc=linux-audit@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=rgb@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.