All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: Paul Moore <paul@paul-moore.com>
Cc: Christoph Hellwig <hch@lst.de>,
	linux-fsdevel@vger.kernel.org, Seth Forshee <sforshee@kernel.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	linux-integrity@vger.kernel.org,
	Stephen Smalley <stephen.smalley.work@gmail.com>,
	Eric Paris <eparis@parisplace.org>,
	selinux@vger.kernel.org
Subject: Re: [PATCH 10/29] selinux: implement set acl hook
Date: Mon, 26 Sep 2022 11:05:13 +0200	[thread overview]
Message-ID: <20220926090513.hn3ylkakb5wf2rrx@wittgenstein> (raw)
In-Reply-To: <CAHC9VhRZf+OAzc96=c2s3NqkizNh2tZbLF8OFPHbFFuFXEZ8sA@mail.gmail.com>

On Fri, Sep 23, 2022 at 01:35:08PM -0400, Paul Moore wrote:
> On Fri, Sep 23, 2022 at 10:35 AM Christian Brauner <brauner@kernel.org> wrote:
> > On Fri, Sep 23, 2022 at 10:26:35AM -0400, Paul Moore wrote:
> > > On Fri, Sep 23, 2022 at 3:57 AM Christian Brauner <brauner@kernel.org> wrote:
> > > > On Fri, Sep 23, 2022 at 08:47:07AM +0200, Christoph Hellwig wrote:
> > > > > On Thu, Sep 22, 2022 at 01:16:57PM -0400, Paul Moore wrote:
> > > > > > properly review the changes, but one thing immediately jumped out at
> > > > > > me when looking at this: why is the LSM hook
> > > > > > "security_inode_set_acl()" when we are passing a dentry instead of an
> > > > > > inode?  We don't have a lot of them, but there are
> > > > > > `security_dentry_*()` LSM hooks in the existing kernel code.
> > > > >
> > > > > I'm no LSM expert, but isn't the inode vs dentry for if it is
> > > > > related to an inode operation or dentry operation, not about that
> > > > > the first argument is?
> > > >
> > > > Indeed. For example ...
> > >
> > > If the goal is for this LSM hook to operate on an inode and not a
> > > dentry, let's pass it an inode instead.  This should help prevent
> >
> > I would be ok with that but EVM requires a dentry being passed and as
> > evm is called from security_inode_set_acl() exactly like it is from
> > security_inode_setxattr() and similar the hook has to take a dentry.
> 
> If a dentry is truly needed by EVM (a quick look indicates that it may
> just be for the VFS getxattr API, but I haven't traced the full code
> path), then I'm having a hard time reconciling that this isn't a
> dentry operation.  Yes, I get that the ACLs belong to the inode and
> not the dentry, but then why do we need the dentry?  It seems like the
> interfaces are broken slightly, or at least a little odd ... <shrug>

There's multiple reasons for the generic xattr api to take a dentry. For
example, there are quite a few filesystems that require dentry access
during (specific or all) xattr operations. So ideally, we'd just want to
pass the dentry I'd say. But we can't do that because of security
modules. 

Some security modules call security_d_instantiate() which in turn calls
__vfs_{g,s}et_xattr() in the hook implementation. That's at least true
of SELinux and Smack iirc. They want dentry and inode but
security_d_instantiate() is called in e.g., d_instantiate and d_add()
before the inode is attached to the dentry:

selinux_d_instantiate()
-> inode_doinit_with_dentry()
   -> inode_doinit_use_xattr()
      -> __vfs_getxattr()

smack_d_instantiate()
-> __vfs_getxattr()
-> __vfs_setxattr()

So that mandates both dentry and inode in vfs xattr helpers.

I don't think we can and want to solve this in this patchset. For now we
can stick with the naming as set by precedent and then in the future the
security modules can decide whether they want to do a rename patchset
for most of the xattr hooks at some point.

> 
> > And I want to minimize - ideally get rid of at some point - separate
> > calls to security_*() and evm_*() or ima_() in the vfs. So the evm hook
> > should please stay in there.
> 
> For the record, I want to get rid of the IMA and EVM specific hooks in
> the kernel.  They were a necessity back when there could only be one
> LSM active at a given time, but with that no longer the case I see
> little reason why IMA/EVM/etc. remain separate; it makes the code
> worse and complicates a lot of things both at the LSM layer as well as
> the rest of the kernel.  I've mentioned this to a few people,
> including Mimi, and it came up during at talk at LPC this year.

Sounds good.

  reply	other threads:[~2022-09-26  9:06 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22 15:16 [RFC PATCH 00/29] acl: add vfs posix acl api Christian Brauner
2022-09-22 15:16 ` [PATCH 01/29] fs: pass dentry to set acl method Christian Brauner
2022-09-23  6:43   ` Christoph Hellwig
2022-09-23  8:09     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 02/29] fs: rename current get " Christian Brauner
2022-09-23  6:44   ` Christoph Hellwig
2022-09-23  8:07     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 03/29] fs: add new " Christian Brauner
2022-09-23  6:46   ` Christoph Hellwig
2022-09-23  8:07     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 04/29] cifs: implement " Christian Brauner
2022-09-23  3:52   ` Steve French
2022-09-23  8:38     ` Christian Brauner
2022-09-25 22:53       ` Steve French
2022-09-26  8:35         ` Christian Brauner
2022-09-22 15:17 ` [PATCH 05/29] cifs: implement set " Christian Brauner
2022-09-22 15:17 ` [PATCH 06/29] 9p: implement get " Christian Brauner
2022-09-24 17:56   ` Al Viro
2022-09-26  8:32     ` Christian Brauner
2022-09-24 18:13   ` Al Viro
2022-09-26  8:16     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 07/29] 9p: implement set " Christian Brauner
2022-09-24 18:22   ` Al Viro
2022-09-26  7:51     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 08/29] acl: add vfs_set_acl() Christian Brauner
2022-09-22 15:17 ` [PATCH 09/29] security: add set acl hook Christian Brauner
2022-09-22 15:17 ` [PATCH 10/29] selinux: implement " Christian Brauner
2022-09-22 17:16   ` Paul Moore
2022-09-23  6:47     ` Christoph Hellwig
2022-09-23  7:57       ` Christian Brauner
2022-09-23 14:26         ` Paul Moore
2022-09-23 14:35           ` Christian Brauner
2022-09-23 17:35             ` Paul Moore
2022-09-26  9:05               ` Christian Brauner [this message]
2022-09-26 18:48                 ` Paul Moore
2022-09-27  7:34               ` Christoph Hellwig
2022-09-22 15:17 ` [PATCH 11/29] smack: " Christian Brauner
2022-09-22 15:17 ` [PATCH 12/29] evm: " Christian Brauner
2022-09-22 15:17 ` [PATCH 13/29] acl: use " Christian Brauner
2022-09-22 15:17 ` [PATCH 14/29] evm: add post " Christian Brauner
2022-09-22 15:17 ` [PATCH 15/29] acl: add vfs_get_acl() Christian Brauner
2022-09-22 15:17 ` [PATCH 16/29] acl: add vfs_remove_acl() Christian Brauner
2022-09-22 15:17 ` [PATCH 17/29] evm: simplify evm_xattr_acl_change() Christian Brauner
2022-09-22 15:17 ` [PATCH 18/29] ksmbd: use vfs_remove_acl() Christian Brauner
2022-09-22 15:17 ` [PATCH 19/29] ecryptfs: implement get acl method Christian Brauner
2022-09-22 15:17 ` [PATCH 20/29] ecryptfs: implement set " Christian Brauner
2022-09-22 15:17 ` [PATCH 21/29] ovl: implement get " Christian Brauner
2022-09-23 14:59   ` Miklos Szeredi
2022-09-23 15:07     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 22/29] ovl: implement set " Christian Brauner
2022-09-23 15:18   ` Miklos Szeredi
2022-09-23 15:35     ` Christian Brauner
2022-09-22 15:17 ` [PATCH 23/29] ovl: use posix acl api Christian Brauner
2022-09-23 15:38   ` Miklos Szeredi
2022-09-23 15:47     ` Christian Brauner
2022-09-23 15:57       ` Miklos Szeredi
2022-09-23 16:23         ` Christian Brauner
2022-09-22 15:17 ` [PATCH 24/29] xattr: " Christian Brauner
2022-09-22 15:17 ` [PATCH 25/29] ecryptfs: use stub posix acl handlers Christian Brauner
2022-09-22 15:17 ` [PATCH 26/29] ovl: " Christian Brauner
2022-09-22 15:17 ` [PATCH 27/29] cifs: " Christian Brauner
2022-09-22 15:17 ` [PATCH 28/29] 9p: " Christian Brauner
2022-09-22 15:17 ` [PATCH 29/29] acl: remove a slew of now unused helpers Christian Brauner
2022-09-22 16:27 ` [RFC PATCH 00/29] acl: add vfs posix acl api Casey Schaufler
2022-09-22 17:12   ` Paul Moore
2022-09-22 17:57   ` Linus Torvalds
2022-09-22 18:53     ` Casey Schaufler
2022-09-22 19:07       ` Paul Moore
2022-09-22 21:57         ` Serge E. Hallyn
2022-09-22 22:13           ` Paul Moore
2022-09-23  5:58             ` Christoph Hellwig
2022-09-23  8:52             ` Christian Brauner
2022-09-23 15:22               ` Casey Schaufler
2022-09-23  8:45     ` Christian Brauner
2022-09-23 14:42       ` Paul Moore

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=20220926090513.hn3ylkakb5wf2rrx@wittgenstein \
    --to=brauner@kernel.org \
    --cc=eparis@parisplace.org \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=paul@paul-moore.com \
    --cc=selinux@vger.kernel.org \
    --cc=sforshee@kernel.org \
    --cc=stephen.smalley.work@gmail.com \
    --cc=viro@zeniv.linux.org.uk \
    /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.