All of lore.kernel.org
 help / color / mirror / Atom feed
From: Casey Schaufler <casey@schaufler-ca.com>
To: Christian Brauner <brauner@kernel.org>, linux-fsdevel@vger.kernel.org
Cc: Seth Forshee <sforshee@kernel.org>,
	Christoph Hellwig <hch@lst.de>, Al Viro <viro@zeniv.linux.org.uk>,
	linux-security-module@vger.kernel.org, casey@schaufler-ca.com
Subject: Re: [PATCH v2 12/30] smack: implement set acl hook
Date: Tue, 27 Sep 2022 16:15:32 -0700	[thread overview]
Message-ID: <4385f332-8b49-827f-502c-5458e14224ef@schaufler-ca.com> (raw)
In-Reply-To: <20220926140827.142806-13-brauner@kernel.org>

On 9/26/2022 7:08 AM, Christian Brauner wrote:
> The current way of setting and getting posix acls through the generic
> xattr interface is error prone and type unsafe. The vfs needs to
> interpret and fixup posix acls before storing or reporting it to
> userspace. Various hacks exist to make this work. The code is hard to
> understand and difficult to maintain in it's current form. Instead of
> making this work by hacking posix acls through xattr handlers we are
> building a dedicated posix acl api around the get and set inode
> operations. This removes a lot of hackiness and makes the codepaths
> easier to maintain. A lot of background can be found in [1].
>
> So far posix acls were passed as a void blob to the security and
> integrity modules. Some of them like evm then proceed to interpret the
> void pointer and convert it into the kernel internal struct posix acl
> representation to perform their integrity checking magic. This is
> obviously pretty problematic as that requires knowledge that only the
> vfs is guaranteed to have and has lead to various bugs. Add a proper
> security hook for setting posix acls and pass down the posix acls in
> their appropriate vfs format instead of hacking it through a void
> pointer stored in the uapi format.
>
> I spent considerate time in the security module infrastructure and
> audited all codepaths. Smack has no restrictions based on the posix
> acl values passed through it. The capability hook doesn't need to be
> called either because it only has restrictions on security.* xattrs. So
> this all becomes a very simple hook for smack.
>
> Link: https://lore.kernel.org/all/20220801145520.1532837-1-brauner@kernel.org [1]
> Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>

The Smack hook looks fine.
Acked-by: Casey Schaufler <casey@schaufler-ca.com>

> ---
>
> Notes:
>     /* v2 */
>     unchanged
>
>  security/smack/smack_lsm.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
>
> diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
> index 001831458fa2..ec6d55632b4f 100644
> --- a/security/smack/smack_lsm.c
> +++ b/security/smack/smack_lsm.c
> @@ -1393,6 +1393,29 @@ static int smack_inode_removexattr(struct user_namespace *mnt_userns,
>  	return 0;
>  }
>  
> +/**
> + * smack_inode_set_acl - Smack check for setting posix acls
> + * @mnt_userns: the userns attached to the mnt this request came from
> + * @dentry: the object
> + * @acl_name: name of the posix acl
> + * @kacl: the posix acls
> + *
> + * Returns 0 if access is permitted, an error code otherwise
> + */
> +static int smack_inode_set_acl(struct user_namespace *mnt_userns,
> +			       struct dentry *dentry, const char *acl_name,
> +			       struct posix_acl *kacl)
> +{
> +	struct smk_audit_info ad;
> +	int rc;
> +
> +	smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_DENTRY);
> +	smk_ad_setfield_u_fs_path_dentry(&ad, dentry);
> +	rc = smk_curacc(smk_of_inode(d_backing_inode(dentry)), MAY_WRITE, &ad);
> +	rc = smk_bu_inode(d_backing_inode(dentry), MAY_WRITE, rc);
> +	return rc;
> +}
> +
>  /**
>   * smack_inode_getsecurity - get smack xattrs
>   * @mnt_userns: active user namespace
> @@ -4772,6 +4795,7 @@ static struct security_hook_list smack_hooks[] __lsm_ro_after_init = {
>  	LSM_HOOK_INIT(inode_post_setxattr, smack_inode_post_setxattr),
>  	LSM_HOOK_INIT(inode_getxattr, smack_inode_getxattr),
>  	LSM_HOOK_INIT(inode_removexattr, smack_inode_removexattr),
> +	LSM_HOOK_INIT(inode_set_acl, smack_inode_set_acl),
>  	LSM_HOOK_INIT(inode_getsecurity, smack_inode_getsecurity),
>  	LSM_HOOK_INIT(inode_setsecurity, smack_inode_setsecurity),
>  	LSM_HOOK_INIT(inode_listsecurity, smack_inode_listsecurity),

  parent reply	other threads:[~2022-09-27 23:15 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-26 14:07 [PATCH v2 00/30] acl: add vfs posix acl api Christian Brauner
2022-09-26 14:07 ` [PATCH v2 01/30] orangefs: rework posix acl handling when creating new filesystem objects Christian Brauner
2022-09-26 14:07 ` [PATCH v2 02/30] fs: pass dentry to set acl method Christian Brauner
2022-09-26 14:08 ` [PATCH v2 03/30] fs: rename current get " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 04/30] fs: add new " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 05/30] cifs: implement " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 06/30] cifs: implement set " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 07/30] 9p: implement get " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 08/30] 9p: implement set " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 09/30] acl: add vfs_set_acl() Christian Brauner
2022-09-26 14:08 ` [PATCH v2 10/30] security: add set acl hook Christian Brauner
2022-09-27 22:55   ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 11/30] selinux: implement " Christian Brauner
2022-09-27 22:55   ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 12/30] smack: " Christian Brauner
2022-09-27 22:56   ` Paul Moore
2022-09-27 23:15   ` Casey Schaufler [this message]
2022-09-26 14:08 ` [PATCH v2 13/30] evm: " Christian Brauner
2022-09-27 22:56   ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 14/30] acl: use " Christian Brauner
2022-09-27 22:56   ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 15/30] evm: add post " Christian Brauner
2022-09-27 22:56   ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 16/30] acl: add vfs_get_acl() Christian Brauner
2022-09-27 22:55   ` Paul Moore
2022-09-28  7:40     ` Christian Brauner
2022-09-28 14:58       ` Paul Moore
2022-09-28 15:12         ` Christian Brauner
2022-09-28 15:27           ` Paul Moore
2022-09-26 14:08 ` [PATCH v2 17/30] acl: add vfs_remove_acl() Christian Brauner
2022-09-27 22:55   ` Paul Moore
2022-09-28  7:41     ` Christian Brauner
2022-09-26 14:08 ` [PATCH v2 18/30] evm: simplify evm_xattr_acl_change() Christian Brauner
2022-09-27 22:56   ` Paul Moore
2022-09-28 13:31     ` Christian Brauner
2022-09-26 14:08 ` [PATCH v2 19/30] ksmbd: use vfs_remove_acl() Christian Brauner
2022-09-26 14:08 ` [PATCH v2 20/30] ecryptfs: implement get acl method Christian Brauner
2022-09-26 14:08 ` [PATCH v2 21/30] ecryptfs: implement set " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 22/30] ovl: implement get " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 23/30] ovl: implement set " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 24/30] ovl: use posix acl api Christian Brauner
2022-09-26 14:08 ` [PATCH v2 25/30] xattr: " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 26/30] ecryptfs: use stub posix acl handlers Christian Brauner
2022-09-26 14:08 ` [PATCH v2 27/30] ovl: " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 28/30] cifs: " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 29/30] 9p: " Christian Brauner
2022-09-26 14:08 ` [PATCH v2 30/30] acl: remove a slew of now unused helpers Christian Brauner
2022-09-27  0:22 ` [PATCH v2 00/30] acl: add vfs posix acl api Casey Schaufler
2022-09-27  7:41   ` Christoph Hellwig
2022-09-27  7:59     ` Christian Brauner
2022-09-27 14:11     ` Casey Schaufler
2022-09-27 15:16       ` Seth Forshee
2022-09-27 15:55         ` Casey Schaufler
2022-09-27 23:24       ` Paul Moore
2022-09-27 23:37         ` Casey Schaufler

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=4385f332-8b49-827f-502c-5458e14224ef@schaufler-ca.com \
    --to=casey@schaufler-ca.com \
    --cc=brauner@kernel.org \
    --cc=hch@lst.de \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=sforshee@kernel.org \
    --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.