mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Chris Wright <chrisw@sous-sol.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Roland McGrath <roland@redhat.com>,
	linux-kernel@vger.kernel.org, James Morris <jmorris@namei.org>
Subject: Re: [PATCH 3/3] ptrace: do not use task_lock() for attach
Date: Thu, 7 May 2009 01:13:32 +0200	[thread overview]
Message-ID: <20090506231332.GA3756@redhat.com> (raw)
In-Reply-To: <20090506224650.GZ3036@sequoia.sous-sol.org>

On 05/06, Chris Wright wrote:
>
> * Oleg Nesterov (oleg@redhat.com) wrote:
> > +	write_lock_irq(&tasklist_lock);
> >  	retval = -EPERM;
> >  	if (unlikely(task->exit_state))
> > -		goto bad;
> > +		goto unlock_tasklist;
> >  	if (task->ptrace)
> > -		goto bad;
> > +		goto unlock_tasklist;
>
> So, task->ptrace now protected by tasklist_lock to keep concurrent tracers
> from both attaching to same task?

Yes,

> (re-oredered)
>
> What do you think?

I think I need your help!

> What does this do for setprocattr()?
>
>                 task_lock(p);
>                 tracer = tracehook_tracer_task(p);
>                 if (tracer)
>                         ptsid = task_sid(tracer);
>                 task_unlock(p);
>
> Looks like it is racy.

Looks like you are right, but I don't understand selinux at all.

> cpu1 (tracer)				cpu2 (tracee, changing sid)
> -------------				---------------------------
> task_lock(tracee);
> __ptrace_may_access(tracee, ATTACH);
> task_unlock(tracee);
> 					task_lock(tracee)
> <security check passes>			tracer = tracehook_tracer_task(tracee);
> 					if (tracer) <-- NULL, !tracee->ptrace
> 					...
> 					update sid w/out checking against tracer
> write_lock_irq(&tasklist_lock);
> ...
> tracee->ptrace = PT_PTRACED;
> ...
> now we are tracing task w/ a sid
> that we didn't authorize to trace

But this can happen without this change too?

- cpu2 takes task_lock(), tracehook_tracer_task() returns NULL because
  we are not traced yet.

- cpu1 does ptrace_attach() and succeds, because cpu2 didn't update sid
  yet

- cpu2 continues, it doesn't check avc_has_perm() (tracer == 0) and
  updates sid.

No?

Shouldn't selinux_setprocattr() take ->cred_exec_mutex, like we do in
selinux_bprm_set_creds() path?

Oleg.


  reply	other threads:[~2009-05-06 23:19 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-05 22:47 Oleg Nesterov
2009-05-06  2:08 ` Roland McGrath
2009-05-06  8:00 ` [RFC PATCH 3/3a] ptrace: add _ptrace_may_access() Ingo Molnar
2009-05-06 20:32   ` Roland McGrath
2009-05-06 20:47     ` Christoph Hellwig
2009-05-06 21:09       ` Roland McGrath
2009-05-07  8:19       ` Ingo Molnar
2009-05-07  8:17     ` Ingo Molnar
2009-05-06 23:53   ` Oleg Nesterov
2009-05-07  0:21     ` Roland McGrath
2009-05-07  6:36       ` Oleg Nesterov
2009-05-07  8:20         ` Ingo Molnar
2009-05-07  8:31           ` Oleg Nesterov
2009-05-07  8:38             ` Ingo Molnar
2009-05-07  8:49               ` [patch] security: rename ptrace_may_access => ptrace_access_check Ingo Molnar
2009-05-07  9:19                 ` Oleg Nesterov
2009-05-07  9:27                   ` Ingo Molnar
2009-05-07  8:57               ` [RFC PATCH 3/3a] ptrace: add _ptrace_may_access() Chris Wright
2009-05-07  9:04                 ` Ingo Molnar
2009-05-07  9:20                   ` Chris Wright
2009-05-07  9:54                     ` James Morris
2009-05-07 10:20                       ` your mail Ingo Molnar
2009-05-07 11:37                         ` security: rename ptrace_may_access => ptrace_access_check James Morris
2009-05-07 14:17                           ` Ingo Molnar
2009-06-23 14:14                           ` Oleg Nesterov
2009-06-23 17:49                             ` Christoph Hellwig
2009-06-23 19:24                               ` [PATCH 0/1] mm_for_maps: simplify, use ptrace_may_access() Oleg Nesterov
2009-06-23 19:25                                 ` [PATCH 1/1] " Oleg Nesterov
2009-06-24  3:06                                   ` Serge E. Hallyn
2009-06-24 14:21                                     ` James Morris
2009-06-24  9:25                                   ` Roland McGrath
2009-06-24 14:37                                     ` Oleg Nesterov
2009-06-24  1:08                             ` security: rename ptrace_may_access => ptrace_access_check James Morris
2009-05-08  3:27                         ` your mail Casey Schaufler
2009-06-24 14:19                       ` security: rename ptrace_may_access => ptrace_access_check James Morris
2009-05-07  9:31                   ` [RFC PATCH 3/3a] ptrace: add _ptrace_may_access() Ingo Molnar
2009-05-07  9:49                     ` [patch 1/2] ptrace, security: rename ptrace_may_access => ptrace_access_check Ingo Molnar
2009-05-07 18:47                       ` Roland McGrath
2009-05-07 19:55                       ` Andrew Morton
2009-05-11 13:39                         ` Ingo Molnar
2009-05-11 18:51                           ` Andrew Morton
2009-05-15  1:10                           ` Américo Wang
2009-05-15 19:34                             ` Ingo Molnar
2009-05-07  9:50                     ` [patch 2/2] ptrace: turn ptrace_access_check() into a retval function Ingo Molnar
2009-05-07 18:47                       ` Roland McGrath
2009-05-06 22:46 ` [PATCH 3/3] ptrace: do not use task_lock() for attach Chris Wright
2009-05-06 23:13   ` Oleg Nesterov [this message]
2009-05-06 23:27     ` Chris Wright
2009-05-06 23:48       ` James Morris
2009-05-07  1:17         ` Roland McGrath
2009-05-08 12:18         ` David Howells

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=20090506231332.GA3756@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=chrisw@sous-sol.org \
    --cc=jmorris@namei.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=roland@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome