From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from goalie.tycho.ncsc.mil (goalie [144.51.31.250]) by tarius.tycho.ncsc.mil (8.13.1/8.13.1) with ESMTP id rBGLCWII017430 for ; Mon, 16 Dec 2013 16:12:32 -0500 Received: by mail-qc0-f179.google.com with SMTP id i8so4204491qcq.10 for ; Mon, 16 Dec 2013 13:12:31 -0800 (PST) From: Paul Moore To: Oleg Nesterov Cc: Stephen Smalley , James Morris , Eric Paris , Evan McNabb , Jan Stancek , linux-kernel@vger.kernel.org, selinux@tycho.nsa.gov Subject: Re: [PATCH v2] selinux: selinux_setprocattr()->ptrace_parent() needs rcu_read_lock() Date: Mon, 16 Dec 2013 16:12:28 -0500 Message-ID: <8620584.RBbmYcQIT9@sifl> In-Reply-To: <20131214163317.GB21675@redhat.com> References: <20131205165953.GA24844@redhat.com> <20131214163256.GA21675@redhat.com> <20131214163317.GB21675@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Sender: owner-selinux@tycho.nsa.gov List-Id: selinux@tycho.nsa.gov On Saturday, December 14, 2013 05:33:17 PM Oleg Nesterov wrote: > selinux_setprocattr() does ptrace_parent(p) under task_lock(p), > but task_struct->alloc_lock doesn't pin ->parent or ->ptrace, > this looks confusing and triggers the "suspicious RCU usage" > warning because ptrace_parent() does rcu_dereference_check(). > > And in theory this is wrong, spin_lock()->preempt_disable() > doesn't necessarily imply rcu_read_lock() we need to access > the ->parent. > > Reported-by: Evan McNabb > Signed-off-by: Oleg Nesterov > --- > security/selinux/hooks.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Applied, thanks. > --- a/security/selinux/hooks.c > +++ b/security/selinux/hooks.c > @@ -5503,11 +5503,11 @@ static int selinux_setprocattr(struct ta > /* Check for ptracing, and update the task SID if ok. > Otherwise, leave SID unchanged and fail. */ > ptsid = 0; > - task_lock(p); > + rcu_read_lock(); > tracer = ptrace_parent(p); > if (tracer) > ptsid = task_sid(tracer); > - task_unlock(p); > + rcu_read_unlock(); > > if (tracer) { > error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS, -- paul moore www.paul-moore.com -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752701Ab3LPVMf (ORCPT ); Mon, 16 Dec 2013 16:12:35 -0500 Received: from mail-qe0-f49.google.com ([209.85.128.49]:63103 "EHLO mail-qe0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751941Ab3LPVMe (ORCPT ); Mon, 16 Dec 2013 16:12:34 -0500 From: Paul Moore To: Oleg Nesterov Cc: Stephen Smalley , James Morris , Eric Paris , Evan McNabb , Jan Stancek , linux-kernel@vger.kernel.org, selinux@tycho.nsa.gov Subject: Re: [PATCH v2] selinux: selinux_setprocattr()->ptrace_parent() needs rcu_read_lock() Date: Mon, 16 Dec 2013 16:12:28 -0500 Message-ID: <8620584.RBbmYcQIT9@sifl> User-Agent: KMail/4.11.4 (Linux/3.12.4-gentoo; KDE/4.11.4; x86_64; ; ) In-Reply-To: <20131214163317.GB21675@redhat.com> References: <20131205165953.GA24844@redhat.com> <20131214163256.GA21675@redhat.com> <20131214163317.GB21675@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Saturday, December 14, 2013 05:33:17 PM Oleg Nesterov wrote: > selinux_setprocattr() does ptrace_parent(p) under task_lock(p), > but task_struct->alloc_lock doesn't pin ->parent or ->ptrace, > this looks confusing and triggers the "suspicious RCU usage" > warning because ptrace_parent() does rcu_dereference_check(). > > And in theory this is wrong, spin_lock()->preempt_disable() > doesn't necessarily imply rcu_read_lock() we need to access > the ->parent. > > Reported-by: Evan McNabb > Signed-off-by: Oleg Nesterov > --- > security/selinux/hooks.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Applied, thanks. > --- a/security/selinux/hooks.c > +++ b/security/selinux/hooks.c > @@ -5503,11 +5503,11 @@ static int selinux_setprocattr(struct ta > /* Check for ptracing, and update the task SID if ok. > Otherwise, leave SID unchanged and fail. */ > ptsid = 0; > - task_lock(p); > + rcu_read_lock(); > tracer = ptrace_parent(p); > if (tracer) > ptsid = task_sid(tracer); > - task_unlock(p); > + rcu_read_unlock(); > > if (tracer) { > error = avc_has_perm(ptsid, sid, SECCLASS_PROCESS, -- paul moore www.paul-moore.com