* [PATCHES] stuff from the last cycle that missed the window
@ 2022-05-20 3:17 Al Viro
2022-05-20 3:17 ` [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy() Al Viro
2022-05-20 3:18 ` [PATCH] get rid of dead code in legitimize_root() Al Viro
0 siblings, 2 replies; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:17 UTC (permalink / raw)
To: linux-fsdevel
Several patches had been sitting in -next since January or so,
missed the last window. Just noticed that this stuff had never
been posted to fsdevel, so...
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy()
2022-05-20 3:17 [PATCHES] stuff from the last cycle that missed the window Al Viro
@ 2022-05-20 3:17 ` Al Viro
2022-05-20 11:48 ` Christian Brauner
2022-05-20 3:18 ` [PATCH] get rid of dead code in legitimize_root() Al Viro
1 sibling, 1 reply; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:17 UTC (permalink / raw)
To: linux-fsdevel
!foo() != 0 is a strange way to spell !foo(); fallout from
"fs: make unlazy_walk() error handling consistent"...
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
fs/namei.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/namei.c b/fs/namei.c
index b867a92c078e..2d6b94a950fe 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1754,7 +1754,7 @@ static int reserve_stack(struct nameidata *nd, struct path *link, unsigned seq)
// unlazy even if we fail to grab the link - cleanup needs it
bool grabbed_link = legitimize_path(nd, link, seq);
- if (!try_to_unlazy(nd) != 0 || !grabbed_link)
+ if (!try_to_unlazy(nd) || !grabbed_link)
return -ECHILD;
if (nd_alloc_stack(nd))
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] get rid of dead code in legitimize_root()
2022-05-20 3:17 [PATCHES] stuff from the last cycle that missed the window Al Viro
2022-05-20 3:17 ` [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy() Al Viro
@ 2022-05-20 3:18 ` Al Viro
2022-05-20 3:20 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Al Viro
2022-05-20 11:43 ` [PATCH] get rid of dead code in legitimize_root() Christian Brauner
1 sibling, 2 replies; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:18 UTC (permalink / raw)
To: linux-fsdevel
Combination of LOOKUP_IS_SCOPED and NULL nd->root.mnt is impossible
after successful path_init(). All places where ->root.mnt might
become NULL do that only if LOOKUP_IS_SCOPED is not there and
path_init() itself can return success without setting nd->root
only if ND_ROOT_PRESET had been set (in which case nd->root
had been set by caller and never changed) or if the name had
been a relative one *and* none of the bits in LOOKUP_IS_SCOPED
had been present.
Since all calls of legitimize_root() must be downstream of successful
path_init(), the check for !nd->root.mnt && (nd->flags & LOOKUP_IS_SCOPED)
is pure paranoia.
FWIW, it had been discussed (and agreed upon) with Aleksa back when
scoped lookups had been merged; looks like that had fallen through the
cracks back then.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
fs/namei.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index 2d6b94a950fe..bfe4ec9e282b 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -729,13 +729,6 @@ static bool legitimize_links(struct nameidata *nd)
static bool legitimize_root(struct nameidata *nd)
{
- /*
- * For scoped-lookups (where nd->root has been zeroed), we need to
- * restart the whole lookup from scratch -- because set_root() is wrong
- * for these lookups (nd->dfd is the root, not the filesystem root).
- */
- if (!nd->root.mnt && (nd->flags & LOOKUP_IS_SCOPED))
- return false;
/* Nothing to do if nd->root is zero or is managed by the VFS user. */
if (!nd->root.mnt || (nd->state & ND_ROOT_PRESET))
return true;
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2)
2022-05-20 3:18 ` [PATCH] get rid of dead code in legitimize_root() Al Viro
@ 2022-05-20 3:20 ` Al Viro
2022-05-20 3:20 ` [PATCH] linux/mount.h: trim includes Al Viro
2022-05-20 11:44 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Christian Brauner
2022-05-20 11:43 ` [PATCH] get rid of dead code in legitimize_root() Christian Brauner
1 sibling, 2 replies; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:20 UTC (permalink / raw)
To: linux-fsdevel
It's done once per (mount-related) syscall and there's no point
whatsoever making it inline.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
fs/fsopen.c | 4 ++--
fs/internal.h | 1 +
fs/namespace.c | 2 +-
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/fs/fsopen.c b/fs/fsopen.c
index 27a890aa493a..fc9d2d9fd234 100644
--- a/fs/fsopen.c
+++ b/fs/fsopen.c
@@ -119,7 +119,7 @@ SYSCALL_DEFINE2(fsopen, const char __user *, _fs_name, unsigned int, flags)
const char *fs_name;
int ret;
- if (!ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN))
+ if (!may_mount())
return -EPERM;
if (flags & ~FSOPEN_CLOEXEC)
@@ -162,7 +162,7 @@ SYSCALL_DEFINE3(fspick, int, dfd, const char __user *, path, unsigned int, flags
unsigned int lookup_flags;
int ret;
- if (!ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN))
+ if (!may_mount())
return -EPERM;
if ((flags & ~(FSPICK_CLOEXEC |
diff --git a/fs/internal.h b/fs/internal.h
index 8590c973c2f4..315ec2f419f7 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -84,6 +84,7 @@ extern int __mnt_want_write_file(struct file *);
extern void __mnt_drop_write_file(struct file *);
extern void dissolve_on_fput(struct vfsmount *);
+extern bool may_mount(void);
int path_mount(const char *dev_name, struct path *path,
const char *type_page, unsigned long flags, void *data_page);
diff --git a/fs/namespace.c b/fs/namespace.c
index 40b994a29e90..6f91ce77e16b 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1717,7 +1717,7 @@ void __detach_mounts(struct dentry *dentry)
/*
* Is the caller allowed to modify his namespace?
*/
-static inline bool may_mount(void)
+bool may_mount(void)
{
return ns_capable(current->nsproxy->mnt_ns->user_ns, CAP_SYS_ADMIN);
}
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] linux/mount.h: trim includes
2022-05-20 3:20 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Al Viro
@ 2022-05-20 3:20 ` Al Viro
2022-05-20 3:22 ` [PATCH] m->mnt_root->d_inode->i_sb is a weird way to spell m->mnt_sb Al Viro
2022-05-20 11:45 ` [PATCH] linux/mount.h: trim includes Christian Brauner
2022-05-20 11:44 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Christian Brauner
1 sibling, 2 replies; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:20 UTC (permalink / raw)
To: linux-fsdevel
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
include/linux/mount.h | 17 +++++------------
1 file changed, 5 insertions(+), 12 deletions(-)
diff --git a/include/linux/mount.h b/include/linux/mount.h
index 7f18a7555dff..b3b149dcbf96 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -11,17 +11,15 @@
#define _LINUX_MOUNT_H
#include <linux/types.h>
-#include <linux/list.h>
-#include <linux/nodemask.h>
-#include <linux/spinlock.h>
-#include <linux/seqlock.h>
-#include <linux/atomic.h>
+#include <asm/barrier.h>
struct super_block;
-struct vfsmount;
struct dentry;
-struct mnt_namespace;
+struct user_namespace;
+struct file_system_type;
struct fs_context;
+struct file;
+struct path;
#define MNT_NOSUID 0x01
#define MNT_NODEV 0x02
@@ -81,9 +79,6 @@ static inline struct user_namespace *mnt_user_ns(const struct vfsmount *mnt)
return smp_load_acquire(&mnt->mnt_userns);
}
-struct file; /* forward dec */
-struct path;
-
extern int mnt_want_write(struct vfsmount *mnt);
extern int mnt_want_write_file(struct file *file);
extern void mnt_drop_write(struct vfsmount *mnt);
@@ -94,12 +89,10 @@ extern struct vfsmount *mnt_clone_internal(const struct path *path);
extern bool __mnt_is_readonly(struct vfsmount *mnt);
extern bool mnt_may_suid(struct vfsmount *mnt);
-struct path;
extern struct vfsmount *clone_private_mount(const struct path *path);
extern int __mnt_want_write(struct vfsmount *);
extern void __mnt_drop_write(struct vfsmount *);
-struct file_system_type;
extern struct vfsmount *fc_mount(struct fs_context *fc);
extern struct vfsmount *vfs_create_mount(struct fs_context *fc);
extern struct vfsmount *vfs_kern_mount(struct file_system_type *type,
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] m->mnt_root->d_inode->i_sb is a weird way to spell m->mnt_sb...
2022-05-20 3:20 ` [PATCH] linux/mount.h: trim includes Al Viro
@ 2022-05-20 3:22 ` Al Viro
2022-05-20 3:23 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Al Viro
2022-05-20 11:45 ` [PATCH] linux/mount.h: trim includes Christian Brauner
1 sibling, 1 reply; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:22 UTC (permalink / raw)
To: linux-fsdevel
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
fs/nfs/nfs4file.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
index e79ae4cbc395..6f5c61f4286e 100644
--- a/fs/nfs/nfs4file.c
+++ b/fs/nfs/nfs4file.c
@@ -326,7 +326,7 @@ static struct file *__nfs42_ssc_open(struct vfsmount *ss_mnt,
char *read_name = NULL;
int len, status = 0;
- server = NFS_SERVER(ss_mnt->mnt_root->d_inode);
+ server = NFS_SB(ss_mnt->mnt_sb);
if (!fattr)
return ERR_PTR(-ENOMEM);
@@ -344,7 +344,7 @@ static struct file *__nfs42_ssc_open(struct vfsmount *ss_mnt,
goto out;
snprintf(read_name, len, SSC_READ_NAME_BODY, read_name_gen++);
- r_ino = nfs_fhget(ss_mnt->mnt_root->d_inode->i_sb, src_fh, fattr);
+ r_ino = nfs_fhget(ss_mnt->mnt_sb, src_fh, fattr);
if (IS_ERR(r_ino)) {
res = ERR_CAST(r_ino);
goto out_free_name;
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount()
2022-05-20 3:22 ` [PATCH] m->mnt_root->d_inode->i_sb is a weird way to spell m->mnt_sb Al Viro
@ 2022-05-20 3:23 ` Al Viro
2022-05-20 3:23 ` [PATCH] move mount-related externs from fs.h to mount.h Al Viro
2022-05-20 19:02 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Eric W. Biederman
0 siblings, 2 replies; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:23 UTC (permalink / raw)
To: linux-fsdevel; +Cc: Eric Biederman
plain mntput() won't do.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
kernel/usermode_driver.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kernel/usermode_driver.c b/kernel/usermode_driver.c
index 9dae1f648713..8303f4c7ca71 100644
--- a/kernel/usermode_driver.c
+++ b/kernel/usermode_driver.c
@@ -28,7 +28,7 @@ static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *na
file = file_open_root_mnt(mnt, name, O_CREAT | O_WRONLY, 0700);
if (IS_ERR(file)) {
- mntput(mnt);
+ kern_unmount(mnt);
return ERR_CAST(file);
}
@@ -38,7 +38,7 @@ static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *na
if (err >= 0)
err = -ENOMEM;
filp_close(file, NULL);
- mntput(mnt);
+ kern_unmount(mnt);
return ERR_PTR(err);
}
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH] move mount-related externs from fs.h to mount.h
2022-05-20 3:23 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Al Viro
@ 2022-05-20 3:23 ` Al Viro
2022-05-20 11:54 ` Christian Brauner
2022-05-20 19:02 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Eric W. Biederman
1 sibling, 1 reply; 14+ messages in thread
From: Al Viro @ 2022-05-20 3:23 UTC (permalink / raw)
To: linux-fsdevel
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
arch/alpha/kernel/osf_sys.c | 1 +
include/linux/fs.h | 11 -----------
include/linux/mount.h | 12 ++++++++++++
security/smack/smackfs.c | 1 +
4 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
index 8bbeebb73cf0..d257293401e2 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -36,6 +36,7 @@
#include <linux/types.h>
#include <linux/ipc.h>
#include <linux/namei.h>
+#include <linux/mount.h>
#include <linux/uio.h>
#include <linux/vfs.h>
#include <linux/rcupdate.h>
diff --git a/include/linux/fs.h b/include/linux/fs.h
index f3daaea16554..b51e3bd223f6 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2504,22 +2504,11 @@ struct super_block *sget(struct file_system_type *type,
extern int register_filesystem(struct file_system_type *);
extern int unregister_filesystem(struct file_system_type *);
-extern struct vfsmount *kern_mount(struct file_system_type *);
-extern void kern_unmount(struct vfsmount *mnt);
-extern int may_umount_tree(struct vfsmount *);
-extern int may_umount(struct vfsmount *);
-extern long do_mount(const char *, const char __user *,
- const char *, unsigned long, void *);
-extern struct vfsmount *collect_mounts(const struct path *);
-extern void drop_collected_mounts(struct vfsmount *);
-extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
- struct vfsmount *);
extern int vfs_statfs(const struct path *, struct kstatfs *);
extern int user_statfs(const char __user *, struct kstatfs *);
extern int fd_statfs(int, struct kstatfs *);
extern int freeze_super(struct super_block *super);
extern int thaw_super(struct super_block *super);
-extern bool our_mnt(struct vfsmount *mnt);
extern __printf(2, 3)
int super_setup_bdi_name(struct super_block *sb, char *fmt, ...);
extern int super_setup_bdi(struct super_block *sb);
diff --git a/include/linux/mount.h b/include/linux/mount.h
index b3b149dcbf96..55a4abaf6715 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -108,6 +108,18 @@ extern void mark_mounts_for_expiry(struct list_head *mounts);
extern dev_t name_to_dev_t(const char *name);
extern bool path_is_mountpoint(const struct path *path);
+extern bool our_mnt(struct vfsmount *mnt);
+
+extern struct vfsmount *kern_mount(struct file_system_type *);
+extern void kern_unmount(struct vfsmount *mnt);
+extern int may_umount_tree(struct vfsmount *);
+extern int may_umount(struct vfsmount *);
+extern long do_mount(const char *, const char __user *,
+ const char *, unsigned long, void *);
+extern struct vfsmount *collect_mounts(const struct path *);
+extern void drop_collected_mounts(struct vfsmount *);
+extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
+ struct vfsmount *);
extern void kern_unmount_array(struct vfsmount *mnt[], unsigned int num);
#endif /* _LINUX_MOUNT_H */
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index 658eab05599e..192f33cc601e 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -23,6 +23,7 @@
#include <linux/ctype.h>
#include <linux/audit.h>
#include <linux/magic.h>
+#include <linux/mount.h>
#include <linux/fs_context.h>
#include "smack.h"
--
2.30.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] get rid of dead code in legitimize_root()
2022-05-20 3:18 ` [PATCH] get rid of dead code in legitimize_root() Al Viro
2022-05-20 3:20 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Al Viro
@ 2022-05-20 11:43 ` Christian Brauner
1 sibling, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2022-05-20 11:43 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
On Fri, May 20, 2022 at 03:18:32AM +0000, Al Viro wrote:
> Combination of LOOKUP_IS_SCOPED and NULL nd->root.mnt is impossible
> after successful path_init(). All places where ->root.mnt might
> become NULL do that only if LOOKUP_IS_SCOPED is not there and
> path_init() itself can return success without setting nd->root
> only if ND_ROOT_PRESET had been set (in which case nd->root
> had been set by caller and never changed) or if the name had
> been a relative one *and* none of the bits in LOOKUP_IS_SCOPED
> had been present.
>
> Since all calls of legitimize_root() must be downstream of successful
> path_init(), the check for !nd->root.mnt && (nd->flags & LOOKUP_IS_SCOPED)
> is pure paranoia.
>
> FWIW, it had been discussed (and agreed upon) with Aleksa back when
> scoped lookups had been merged; looks like that had fallen through the
> cracks back then.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
Looks good to me,
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2)
2022-05-20 3:20 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Al Viro
2022-05-20 3:20 ` [PATCH] linux/mount.h: trim includes Al Viro
@ 2022-05-20 11:44 ` Christian Brauner
1 sibling, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2022-05-20 11:44 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
On Fri, May 20, 2022 at 03:20:06AM +0000, Al Viro wrote:
> It's done once per (mount-related) syscall and there's no point
> whatsoever making it inline.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
Looks good to me,
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] linux/mount.h: trim includes
2022-05-20 3:20 ` [PATCH] linux/mount.h: trim includes Al Viro
2022-05-20 3:22 ` [PATCH] m->mnt_root->d_inode->i_sb is a weird way to spell m->mnt_sb Al Viro
@ 2022-05-20 11:45 ` Christian Brauner
1 sibling, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2022-05-20 11:45 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
On Fri, May 20, 2022 at 03:20:45AM +0000, Al Viro wrote:
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
Looks good to me,
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy()
2022-05-20 3:17 ` [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy() Al Viro
@ 2022-05-20 11:48 ` Christian Brauner
0 siblings, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2022-05-20 11:48 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
On Fri, May 20, 2022 at 03:17:52AM +0000, Al Viro wrote:
> !foo() != 0 is a strange way to spell !foo(); fallout from
> "fs: make unlazy_walk() error handling consistent"...
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
Looks good to me,
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] move mount-related externs from fs.h to mount.h
2022-05-20 3:23 ` [PATCH] move mount-related externs from fs.h to mount.h Al Viro
@ 2022-05-20 11:54 ` Christian Brauner
0 siblings, 0 replies; 14+ messages in thread
From: Christian Brauner @ 2022-05-20 11:54 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
On Fri, May 20, 2022 at 03:23:58AM +0000, Al Viro wrote:
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> ---
Looks good to me,
Reviewed-by: Christian Brauner (Microsoft) <brauner@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount()
2022-05-20 3:23 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Al Viro
2022-05-20 3:23 ` [PATCH] move mount-related externs from fs.h to mount.h Al Viro
@ 2022-05-20 19:02 ` Eric W. Biederman
1 sibling, 0 replies; 14+ messages in thread
From: Eric W. Biederman @ 2022-05-20 19:02 UTC (permalink / raw)
To: Al Viro; +Cc: linux-fsdevel
Al Viro <viro@zeniv.linux.org.uk> writes:
> plain mntput() won't do.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
It is already performing kern_unmount on the happy path
so I don't see how it will be a problem to call kern_unmount
on a failure path.
Do you want to merge this through your tree?
> kernel/usermode_driver.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/usermode_driver.c b/kernel/usermode_driver.c
> index 9dae1f648713..8303f4c7ca71 100644
> --- a/kernel/usermode_driver.c
> +++ b/kernel/usermode_driver.c
> @@ -28,7 +28,7 @@ static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *na
>
> file = file_open_root_mnt(mnt, name, O_CREAT | O_WRONLY, 0700);
> if (IS_ERR(file)) {
> - mntput(mnt);
> + kern_unmount(mnt);
> return ERR_CAST(file);
> }
>
> @@ -38,7 +38,7 @@ static struct vfsmount *blob_to_mnt(const void *data, size_t len, const char *na
> if (err >= 0)
> err = -ENOMEM;
> filp_close(file, NULL);
> - mntput(mnt);
> + kern_unmount(mnt);
> return ERR_PTR(err);
> }
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2022-05-20 19:04 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-20 3:17 [PATCHES] stuff from the last cycle that missed the window Al Viro
2022-05-20 3:17 ` [PATCH] fs/namei.c:reserve_stack(): tidy up the call of try_to_unlazy() Al Viro
2022-05-20 11:48 ` Christian Brauner
2022-05-20 3:18 ` [PATCH] get rid of dead code in legitimize_root() Al Viro
2022-05-20 3:20 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Al Viro
2022-05-20 3:20 ` [PATCH] linux/mount.h: trim includes Al Viro
2022-05-20 3:22 ` [PATCH] m->mnt_root->d_inode->i_sb is a weird way to spell m->mnt_sb Al Viro
2022-05-20 3:23 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Al Viro
2022-05-20 3:23 ` [PATCH] move mount-related externs from fs.h to mount.h Al Viro
2022-05-20 11:54 ` Christian Brauner
2022-05-20 19:02 ` [PATCH] blob_to_mnt(): kern_unmount() is needed to undo kern_mount() Eric W. Biederman
2022-05-20 11:45 ` [PATCH] linux/mount.h: trim includes Christian Brauner
2022-05-20 11:44 ` [PATCH] uninline may_mount() and don't opencode it in fspick(2)/fsopen(2) Christian Brauner
2022-05-20 11:43 ` [PATCH] get rid of dead code in legitimize_root() Christian Brauner
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.