Blame SOURCES/0069-fs-make-helpers-idmap-mount-aware.patch

Kmods SIG 50e2b3
From 549c7297717c32ee53f156cd949e055e601f67bb Mon Sep 17 00:00:00 2001
Kmods SIG 50e2b3
From: Christian Brauner <christian.brauner@ubuntu.com>
Kmods SIG 50e2b3
Date: Thu, 21 Jan 2021 14:19:43 +0100
Kmods SIG 50e2b3
Subject: [Backport 549c7297717c] fs: make helpers idmap mount aware
Kmods SIG 50e2b3
Kmods SIG 50e2b3
Extend some inode methods with an additional user namespace argument. A
Kmods SIG 50e2b3
filesystem that is aware of idmapped mounts will receive the user
Kmods SIG 50e2b3
namespace the mount has been marked with. This can be used for
Kmods SIG 50e2b3
additional permission checking and also to enable filesystems to
Kmods SIG 50e2b3
translate between uids and gids if they need to. We have implemented all
Kmods SIG 50e2b3
relevant helpers in earlier patches.
Kmods SIG 50e2b3
Kmods SIG 50e2b3
As requested we simply extend the exisiting inode method instead of
Kmods SIG 50e2b3
introducing new ones. This is a little more code churn but it's mostly
Kmods SIG 50e2b3
mechanical and doesnt't leave us with additional inode methods.
Kmods SIG 50e2b3
Kmods SIG 50e2b3
Link: https://lore.kernel.org/r/20210121131959.646623-25-christian.brauner@ubuntu.com
Kmods SIG 50e2b3
Cc: Christoph Hellwig <hch@lst.de>
Kmods SIG 50e2b3
Cc: David Howells <dhowells@redhat.com>
Kmods SIG 50e2b3
Cc: Al Viro <viro@zeniv.linux.org.uk>
Kmods SIG 50e2b3
Cc: linux-fsdevel@vger.kernel.org
Kmods SIG 50e2b3
Reviewed-by: Christoph Hellwig <hch@lst.de>
Kmods SIG 50e2b3
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Kmods SIG 50e2b3
---
Kmods SIG 50e2b3
 src/exfat_fs.h |  8 +++++---
Kmods SIG 50e2b3
 src/file.c     |  8 +++++---
Kmods SIG 50e2b3
 src/namei.c    | 14 ++++++++------
Kmods SIG 50e2b3
 3 files changed, 18 insertions(+), 12 deletions(-)
Kmods SIG 50e2b3
Kmods SIG 50e2b3
diff --git a/src/exfat_fs.h b/src/exfat_fs.h
Kmods SIG 50e2b3
index b8f0e829ecbd26c14788899de066e533b6dbaf1e..d905bb9cd2ca61f9f25c0a338e441342af9778d8 100644
Kmods SIG 50e2b3
--- a/src/exfat_fs.h
Kmods SIG 50e2b3
+++ b/src/exfat_fs.h
Kmods SIG 50e2b3
@@ -416,9 +416,11 @@ int exfat_count_used_clusters(struct super_block *sb, unsigned int *ret_count);
Kmods SIG 50e2b3
 extern const struct file_operations exfat_file_operations;
Kmods SIG 50e2b3
 int __exfat_truncate(struct inode *inode, loff_t new_size);
Kmods SIG 50e2b3
 void exfat_truncate(struct inode *inode, loff_t size);
Kmods SIG 50e2b3
-int exfat_setattr(struct dentry *dentry, struct iattr *attr);
Kmods SIG 50e2b3
-int exfat_getattr(const struct path *path, struct kstat *stat,
Kmods SIG 50e2b3
-		unsigned int request_mask, unsigned int query_flags);
Kmods SIG 50e2b3
+int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
Kmods SIG 50e2b3
+		  struct iattr *attr);
Kmods SIG 50e2b3
+int exfat_getattr(struct user_namespace *mnt_userns, const struct path *path,
Kmods SIG 50e2b3
+		  struct kstat *stat, unsigned int request_mask,
Kmods SIG 50e2b3
+		  unsigned int query_flags);
Kmods SIG 50e2b3
 int exfat_file_fsync(struct file *file, loff_t start, loff_t end, int datasync);
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
 /* namei.c */
Kmods SIG 50e2b3
diff --git a/src/file.c b/src/file.c
Kmods SIG 50e2b3
index e9705b3295d31def9c56d86955da9ef359fd9567..3aa6eb4de5e3d40b7dd3693435ac5c4dbdda5aa3 100644
Kmods SIG 50e2b3
--- a/src/file.c
Kmods SIG 50e2b3
+++ b/src/file.c
Kmods SIG 50e2b3
@@ -267,8 +267,9 @@ void exfat_truncate(struct inode *inode, loff_t size)
Kmods SIG 50e2b3
 	mutex_unlock(&sbi->s_lock);
Kmods SIG 50e2b3
 }
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
-int exfat_getattr(const struct path *path, struct kstat *stat,
Kmods SIG 50e2b3
-		unsigned int request_mask, unsigned int query_flags)
Kmods SIG 50e2b3
+int exfat_getattr(struct user_namespace *mnt_uerns, const struct path *path,
Kmods SIG 50e2b3
+		  struct kstat *stat, unsigned int request_mask,
Kmods SIG 50e2b3
+		  unsigned int query_flags)
Kmods SIG 50e2b3
 {
Kmods SIG 50e2b3
 	struct inode *inode = d_backing_inode(path->dentry);
Kmods SIG 50e2b3
 	struct exfat_inode_info *ei = EXFAT_I(inode);
Kmods SIG 50e2b3
@@ -282,7 +283,8 @@ int exfat_getattr(const struct path *path, struct kstat *stat,
Kmods SIG 50e2b3
 	return 0;
Kmods SIG 50e2b3
 }
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
-int exfat_setattr(struct dentry *dentry, struct iattr *attr)
Kmods SIG 50e2b3
+int exfat_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
Kmods SIG 50e2b3
+		  struct iattr *attr)
Kmods SIG 50e2b3
 {
Kmods SIG 50e2b3
 	struct exfat_sb_info *sbi = EXFAT_SB(dentry->d_sb);
Kmods SIG 50e2b3
 	struct inode *inode = dentry->d_inode;
Kmods SIG 50e2b3
diff --git a/src/namei.c b/src/namei.c
Kmods SIG 50e2b3
index 2932b23a3b6c36ebfb82e5a5e7621c07fbb2822d..d9e8ec689c55ca3e8511177de0c01dfe1d3c090a 100644
Kmods SIG 50e2b3
--- a/src/namei.c
Kmods SIG 50e2b3
+++ b/src/namei.c
Kmods SIG 50e2b3
@@ -541,8 +541,8 @@ static int exfat_add_entry(struct inode *inode, const char *path,
Kmods SIG 50e2b3
 	return ret;
Kmods SIG 50e2b3
 }
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
-static int exfat_create(struct inode *dir, struct dentry *dentry, umode_t mode,
Kmods SIG 50e2b3
-		bool excl)
Kmods SIG 50e2b3
+static int exfat_create(struct user_namespace *mnt_userns, struct inode *dir,
Kmods SIG 50e2b3
+			struct dentry *dentry, umode_t mode, bool excl)
Kmods SIG 50e2b3
 {
Kmods SIG 50e2b3
 	struct super_block *sb = dir->i_sb;
Kmods SIG 50e2b3
 	struct inode *inode;
Kmods SIG 50e2b3
@@ -827,7 +827,8 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry)
Kmods SIG 50e2b3
 	return err;
Kmods SIG 50e2b3
 }
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
-static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
Kmods SIG 50e2b3
+static int exfat_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
Kmods SIG 50e2b3
+		       struct dentry *dentry, umode_t mode)
Kmods SIG 50e2b3
 {
Kmods SIG 50e2b3
 	struct super_block *sb = dir->i_sb;
Kmods SIG 50e2b3
 	struct inode *inode;
Kmods SIG 50e2b3
@@ -1318,9 +1319,10 @@ static int __exfat_rename(struct inode *old_parent_inode,
Kmods SIG 50e2b3
 	return ret;
Kmods SIG 50e2b3
 }
Kmods SIG 50e2b3
 
Kmods SIG 50e2b3
-static int exfat_rename(struct inode *old_dir, struct dentry *old_dentry,
Kmods SIG 50e2b3
-		struct inode *new_dir, struct dentry *new_dentry,
Kmods SIG 50e2b3
-		unsigned int flags)
Kmods SIG 50e2b3
+static int exfat_rename(struct user_namespace *mnt_userns,
Kmods SIG 50e2b3
+			struct inode *old_dir, struct dentry *old_dentry,
Kmods SIG 50e2b3
+			struct inode *new_dir, struct dentry *new_dentry,
Kmods SIG 50e2b3
+			unsigned int flags)
Kmods SIG 50e2b3
 {
Kmods SIG 50e2b3
 	struct inode *old_inode, *new_inode;
Kmods SIG 50e2b3
 	struct super_block *sb = old_dir->i_sb;
Kmods SIG 50e2b3
-- 
Kmods SIG 50e2b3
2.31.1
Kmods SIG 50e2b3