Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp192657yba; Sat, 30 Mar 2019 19:14:53 -0700 (PDT) X-Google-Smtp-Source: APXvYqw3ouotTKbiATi8bLqgparaiSC+D0doigQahg4/q/bupLDcBC7p4J8LEXE1OfrSRArdYqkz X-Received: by 2002:a63:195e:: with SMTP id 30mr50830736pgz.312.1553998493068; Sat, 30 Mar 2019 19:14:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553998493; cv=none; d=google.com; s=arc-20160816; b=bWups/aB0DCpBr8r+037LSVx+Ex0zMpuws/ObGoXAGOdhkPvoKzzRkCRIR9sPuzNU8 jylIzuk2Be3Saj9LQrRSpz1YXL9DmVfRLp3EqAg2sVyoztWJgRdlabtA6ixIkbUmHqHV s2wzGfWD1ZXx2Y+UdCzNQ0k591Mer99i8T8e4V6+AmFCP+aakXrfMm31C/qVRl/mklFd yJwr26I2MrPkDPL08vyZO1kDWSQVsVsdDHk29UnXeZ/kuG1oib2dMxuBiLDX1TrdLBWA 0EY53HpZ9d3AeDSdmT6dG39y183sjOPuww93Kp0n16/GHjLLLcNl+YkFkV/t+eOaRZea Fl1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=tJumXA4I7k/T8kEIUEmd8hNsNlB7ZmZBn5wDpSjNPVk=; b=jmvuyTRzhrUorn4gY0m0VbJ+qO44mfNWVlK9Pnlp8HNzqZayvNvXaW1LG84GB8F7R9 1CQCTZqxeVHQn5txFk2wDX9PJ0onB8pr/iBoMzXTx0+HAMv927denkY0ZUfm7LJyjUWk bbpl0CMmgwxulJ098H0s7HWKINTpr+sDiYH+p9V7HkLEowvDfGZdpHxLUBa3k6ZKifhc Jtla1c9Y21iZSiINEXRMxPi64AWRoTBZsJFELytQWj4vM0P12LMgXLoyEdIMjmfXiX7X EE4rr9jHtcdwXPavD7jetPRViHXO/QSc62Zp85YFDMgS8P1fTP5AeHkJkH/RRBqnGkx2 eMZw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 32si5712570plb.278.2019.03.30.19.14.37; Sat, 30 Mar 2019 19:14:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731103AbfCaCMm (ORCPT + 99 others); Sat, 30 Mar 2019 22:12:42 -0400 Received: from charlotte.tuxdriver.com ([70.61.120.58]:60375 "EHLO smtp.tuxdriver.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731063AbfCaCMm (ORCPT ); Sat, 30 Mar 2019 22:12:42 -0400 Received: from cpe-2606-a000-111b-405a-9816-2c85-c514-8f7a.dyn6.twc.com ([2606:a000:111b:405a:9816:2c85:c514:8f7a] helo=localhost) by smtp.tuxdriver.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.63) (envelope-from ) id 1hAPxQ-0004uU-D9; Sat, 30 Mar 2019 22:12:32 -0400 Date: Sat, 30 Mar 2019 22:11:56 -0400 From: Neil Horman To: Paul Moore Cc: Richard Guy Briggs , Ondrej Mosnacek , linux-api@vger.kernel.org, containers@lists.linux-foundation.org, LKML , David Howells , Linux-Audit Mailing List , netfilter-devel@vger.kernel.org, "Eric W . Biederman" , Simo Sorce , netdev@vger.kernel.org, linux-fsdevel@vger.kernel.org, Eric Paris , "Serge E. Hallyn" Subject: Re: [PATCH ghak90 V5 09/10] audit: add support for containerid to network namespaces Message-ID: <20190330125748.GA2869@hmswarspite.think-freely.org> References: <27473c84a274c64871cfa8e3636deaf05603c978.1552665316.git.rgb@redhat.com> <20190328011202.6raixwzdimn5b4zk@madcap2.tricolour.ca> <20190328214023.qpszfvxbrjlldmmt@madcap2.tricolour.ca> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.3 (2019-02-01) X-Spam-Score: -2.9 (--) X-Spam-Status: No Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Mar 28, 2019 at 06:00:21PM -0400, Paul Moore wrote: > On Thu, Mar 28, 2019 at 5:40 PM Richard Guy Briggs wrote: > > On 2019-03-28 11:46, Paul Moore wrote: > > > On Wed, Mar 27, 2019 at 9:12 PM Richard Guy Briggs wrote: > > > > > > > > On 2019-03-27 23:42, Ondrej Mosnacek wrote: > > > > > On Fri, Mar 15, 2019 at 7:35 PM Richard Guy Briggs wrote: > > > > > > Audit events could happen in a network namespace outside of a task > > > > > > context due to packets received from the net that trigger an auditing > > > > > > rule prior to being associated with a running task. The network > > > > > > namespace could be in use by multiple containers by association to the > > > > > > tasks in that network namespace. We still want a way to attribute > > > > > > these events to any potential containers. Keep a list per network > > > > > > namespace to track these audit container identifiiers. > > > > > > > > > > > > Add/increment the audit container identifier on: > > > > > > - initial setting of the audit container identifier via /proc > > > > > > - clone/fork call that inherits an audit container identifier > > > > > > - unshare call that inherits an audit container identifier > > > > > > - setns call that inherits an audit container identifier > > > > > > Delete/decrement the audit container identifier on: > > > > > > - an inherited audit container identifier dropped when child set > > > > > > - process exit > > > > > > - unshare call that drops a net namespace > > > > > > - setns call that drops a net namespace > > > > > > > > > > > > See: https://github.com/linux-audit/audit-kernel/issues/92 > > > > > > See: https://github.com/linux-audit/audit-testsuite/issues/64 > > > > > > See: https://github.com/linux-audit/audit-kernel/wiki/RFE-Audit-Container-ID > > > > > > Signed-off-by: Richard Guy Briggs > > > > > > --- > > > > > > include/linux/audit.h | 19 ++++++++++++ > > > > > > kernel/audit.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++-- > > > > > > kernel/nsproxy.c | 4 +++ > > > > > > 3 files changed, 106 insertions(+), 3 deletions(-) > > > > > > > > > > > > diff --git a/include/linux/audit.h b/include/linux/audit.h > > > > > > index fa19fa408931..70255c2dfb9f 100644 > > > > > > --- a/include/linux/audit.h > > > > > > +++ b/include/linux/audit.h > > > > > > @@ -27,6 +27,7 @@ > > > > > > #include > > > > > > #include /* LOOKUP_* */ > > > > > > #include > > > > > > +#include > > > > > > > > > > > > #define AUDIT_INO_UNSET ((unsigned long)-1) > > > > > > #define AUDIT_DEV_UNSET ((dev_t)-1) > > > > > > @@ -99,6 +100,13 @@ struct audit_task_info { > > > > > > > > > > > > extern struct audit_task_info init_struct_audit; > > > > > > > > > > > > +struct audit_contid { > > > > > > + struct list_head list; > > > > > > + u64 id; > > > > > > + refcount_t refcount; > > > > > > > > > > Hm, since we only ever touch the refcount under a spinlock, I wonder > > > > > if we could just make it a regular unsigned int (we don't need the > > > > > atomicity guarantees). OTOH, refcount_t comes with some extra overflow > > > > > checking, so it's probably better to leave it as is... > > > > > > > > Since the update is done using rcu-safe methods, do we even need the > > > > spin_lock? Neil? Paul? > > > > > > As discussed, the refcount field is protected against simultaneous > > > writes by the spinlock that protects additions/removals from the list > > > as a whole so I don't believe the refcount_t atomicity is critical in > > > this regard. > > > > > > Where it gets tricky, and I can't say I'm 100% confident on my answer > > > here, is if refcount was a regular int and we wanted to access it > > > outside of a spinlock (to be clear, it doesn't look like this patch > > > currently does this). With RCU, if refcount was a regular int > > > (unsigned or otherwise), I believe it would be possible for different > > > threads of execution to potentially see different values of refcount > > > (assuming one thread was adding/removing from the list). Using a > > > refcount_t would protect against this, alternatively, taking the > > > spinlock should also protect against this. > > > > Ok, from the above it isn't clear to me if you are happy with the > > current code or would prefer any changes, or from below that you still > > need to work it through to make a pronouncement. It sounds to me you > > would be ok with *either* spinlock *or* refcount_t, but don't see the > > need for both. > > To be fair you didn't ask if I was "happy" with the approach above, > you asked if we needed the spinlock/refcount_t. I believe I answered > that question as comprehensively as I could, but perhaps you wanted a > hard yes or no? In that case, since refcount_t is obviously safer, I > would stick with that for now just to limit the number of possible > failures. If someone smarter than you or I comes along and > definitively says you are 100% safe to use an int, then go ahead and > use an int. > > Beyond that, I'm still in the process of reviewing your patches, but I > haven't finished yet, so no "pronouncement" or whatever you want to > call it. > We definately need the spinlock, as its not meant to protect the refcount alterations, its meant to protect parallel modifications to the list pointers. Without the spinlock, the list can become corrupted (protecting the refcount is just a byproduct). Because of that byproduct, the atomicity of the refcount isn't required, and so we could modify it to be an int or some other non-atomic ordinal type, but as I noted, I don't think thats a good idea. The refcount type helps denote clearly what the variable is used for, making it more readable, and given the relative non-performance critical path that the reference count is read/written in, and the relatively more expensive locking we are already doing there, I think there is more value in using the refcount to make the code legible than making marginally more performant by altering it to be an int type. Neil > -- > paul moore > www.paul-moore.com >