From: Miklos Szeredi <miklos@szeredi.hu>
To: Christian Brauner <brauner@kernel.org>
Cc: linux-fsdevel@vger.kernel.org, Seth Forshee <sforshee@kernel.org>,
Christoph Hellwig <hch@lst.de>, Al Viro <viro@zeniv.linux.org.uk>,
Amir Goldstein <amir73il@gmail.com>,
linux-unionfs@vger.kernel.org
Subject: Re: [PATCH 21/29] ovl: implement get acl method
Date: Fri, 23 Sep 2022 16:59:42 +0200 [thread overview]
Message-ID: <CAJfpegu0xgSuvcY9zwEMDsb9PC3_AYPXvvE61fdHYEssVSf-tA@mail.gmail.com> (raw)
In-Reply-To: <20220922151728.1557914-22-brauner@kernel.org>
On Thu, 22 Sept 2022 at 17:18, Christian Brauner <brauner@kernel.org> 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].
>
> In order to build a type safe posix api around get and set acl we need
> all filesystem to implement get and set acl.
>
> Now that we have added get and set acl inode operations that allow easy
> access to the dentry we give overlayfs it's own get and set acl inode
> operations.
>
> Since overlayfs is a stacking filesystem it will use the newly added
> posix acl api when retrieving posix acls from the relevant layer.
>
> Since overlayfs can also be mounted on top of idmapped layers. If
> idmapped layers are used overlayfs must take the layer's idmapping into
> account after it retrieved the posix acls from the relevant layer.
>
> Note, until the vfs has been switched to the new posix acl api this
> patch is a non-functional change.
>
> Link: https://lore.kernel.org/all/20220801145520.1532837-1-brauner@kernel.org [1]
> Signed-off-by: Christian Brauner (Microsoft) <brauner@kernel.org>
> ---
> fs/overlayfs/dir.c | 3 +-
> fs/overlayfs/inode.c | 63 ++++++++++++++++++++++++++++++++++++----
> fs/overlayfs/overlayfs.h | 10 +++++--
> 3 files changed, 67 insertions(+), 9 deletions(-)
>
> diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
> index 7bece7010c00..eb49d5d7b56f 100644
> --- a/fs/overlayfs/dir.c
> +++ b/fs/overlayfs/dir.c
> @@ -1311,7 +1311,8 @@ const struct inode_operations ovl_dir_inode_operations = {
> .permission = ovl_permission,
> .getattr = ovl_getattr,
> .listxattr = ovl_listxattr,
> - .get_inode_acl = ovl_get_acl,
> + .get_inode_acl = ovl_get_inode_acl,
> + .get_acl = ovl_get_acl,
> .update_time = ovl_update_time,
> .fileattr_get = ovl_fileattr_get,
> .fileattr_set = ovl_fileattr_set,
> diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
> index ecb51c249466..dd11e13cd288 100644
> --- a/fs/overlayfs/inode.c
> +++ b/fs/overlayfs/inode.c
> @@ -14,6 +14,8 @@
> #include <linux/fileattr.h>
> #include <linux/security.h>
> #include <linux/namei.h>
> +#include <linux/posix_acl.h>
> +#include <linux/posix_acl_xattr.h>
> #include "overlayfs.h"
>
>
> @@ -460,9 +462,9 @@ ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size)
> * of the POSIX ACLs retrieved from the lower layer to this function to not
> * alter the POSIX ACLs for the underlying filesystem.
> */
> -static void ovl_idmap_posix_acl(struct inode *realinode,
> - struct user_namespace *mnt_userns,
> - struct posix_acl *acl)
> +void ovl_idmap_posix_acl(struct inode *realinode,
> + struct user_namespace *mnt_userns,
> + struct posix_acl *acl)
> {
> struct user_namespace *fs_userns = i_user_ns(realinode);
>
> @@ -495,7 +497,7 @@ static void ovl_idmap_posix_acl(struct inode *realinode,
> *
> * This is obviously only relevant when idmapped layers are used.
> */
> -struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu)
> +struct posix_acl *ovl_get_inode_acl(struct inode *inode, int type, bool rcu)
> {
> struct inode *realinode = ovl_inode_real(inode);
> struct posix_acl *acl, *clone;
> @@ -547,6 +549,53 @@ struct posix_acl *ovl_get_acl(struct inode *inode, int type, bool rcu)
> posix_acl_release(acl);
> return clone;
> }
> +
> +static struct posix_acl *ovl_get_acl_path(const struct path *path,
> + const char *acl_name)
> +{
> + struct posix_acl *real_acl, *clone;
> + struct user_namespace *mnt_userns;
> +
> + mnt_userns = mnt_user_ns(path->mnt);
> +
> + real_acl = vfs_get_acl(mnt_userns, path->dentry, acl_name);
> + if (IS_ERR(real_acl))
> + return real_acl;
> + if (!real_acl)
> + return NULL;
if (IS_ERR_OR_NULL(real_acl))
return real_acl;
> +
> + if (!is_idmapped_mnt(path->mnt))
> + return real_acl;
> +
> + /*
> + * We cannot alter the ACLs returned from the relevant layer as that
> + * would alter the cached values filesystem wide for the lower
> + * filesystem. Instead we can clone the ACLs and then apply the
> + * relevant idmapping of the layer.
> + */
Can't vfs_get_acl() return 'const posix_acl *' to enforce that?
Thanks,
Miklos
next prev parent reply other threads:[~2022-09-23 15:00 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
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 [this message]
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=CAJfpegu0xgSuvcY9zwEMDsb9PC3_AYPXvvE61fdHYEssVSf-tA@mail.gmail.com \
--to=miklos@szeredi.hu \
--cc=amir73il@gmail.com \
--cc=brauner@kernel.org \
--cc=hch@lst.de \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-unionfs@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).