[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251216035518.4037331-48-viro@zeniv.linux.org.uk>
Date: Tue, 16 Dec 2025 03:55:06 +0000
From: Al Viro <viro@...iv.linux.org.uk>
To: linux-fsdevel@...r.kernel.org
Cc: torvalds@...ux-foundation.org,
brauner@...nel.org,
jack@...e.cz,
mjguzik@...il.com,
paul@...l-moore.com,
axboe@...nel.dk,
audit@...r.kernel.org,
io-uring@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [RFC PATCH v3 47/59] do_{mknodat,mkdirat,unlinkat,rmdir}(): use CLASS(filename_consume)
same rationale as for previous commit
Signed-off-by: Al Viro <viro@...iv.linux.org.uk>
---
fs/namei.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index fbf306fe8414..0221cdb92297 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -5066,9 +5066,10 @@ static int may_mknod(umode_t mode)
}
}
-static int do_mknodat(int dfd, struct filename *name, umode_t mode,
+static int do_mknodat(int dfd, struct filename *__name, umode_t mode,
unsigned int dev)
{
+ CLASS(filename_consume, name)(__name);
struct delegated_inode di = { };
struct mnt_idmap *idmap;
struct dentry *dentry;
@@ -5078,12 +5079,11 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
error = may_mknod(mode);
if (error)
- goto out1;
+ return error;
retry:
dentry = filename_create(dfd, name, &path, lookup_flags);
- error = PTR_ERR(dentry);
if (IS_ERR(dentry))
- goto out1;
+ return PTR_ERR(dentry);
error = security_path_mknod(&path, dentry,
mode_strip_umask(path.dentry->d_inode, mode), dev);
@@ -5117,8 +5117,6 @@ static int do_mknodat(int dfd, struct filename *name, umode_t mode,
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-out1:
- putname(name);
return error;
}
@@ -5201,8 +5199,9 @@ struct dentry *vfs_mkdir(struct mnt_idmap *idmap, struct inode *dir,
}
EXPORT_SYMBOL(vfs_mkdir);
-int do_mkdirat(int dfd, struct filename *name, umode_t mode)
+int do_mkdirat(int dfd, struct filename *__name, umode_t mode)
{
+ CLASS(filename_consume, name)(__name);
struct dentry *dentry;
struct path path;
int error;
@@ -5211,9 +5210,8 @@ int do_mkdirat(int dfd, struct filename *name, umode_t mode)
retry:
dentry = filename_create(dfd, name, &path, lookup_flags);
- error = PTR_ERR(dentry);
if (IS_ERR(dentry))
- goto out_putname;
+ return PTR_ERR(dentry);
error = security_path_mkdir(&path, dentry,
mode_strip_umask(path.dentry->d_inode, mode));
@@ -5233,8 +5231,6 @@ int do_mkdirat(int dfd, struct filename *name, umode_t mode)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-out_putname:
- putname(name);
return error;
}
@@ -5308,8 +5304,9 @@ int vfs_rmdir(struct mnt_idmap *idmap, struct inode *dir,
}
EXPORT_SYMBOL(vfs_rmdir);
-int do_rmdir(int dfd, struct filename *name)
+int do_rmdir(int dfd, struct filename *__name)
{
+ CLASS(filename_consume, name)(__name);
int error;
struct dentry *dentry;
struct path path;
@@ -5320,7 +5317,7 @@ int do_rmdir(int dfd, struct filename *name)
retry:
error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
if (error)
- goto exit1;
+ return error;
switch (type) {
case LAST_DOTDOT:
@@ -5362,8 +5359,6 @@ int do_rmdir(int dfd, struct filename *name)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-exit1:
- putname(name);
return error;
}
@@ -5451,8 +5446,9 @@ EXPORT_SYMBOL(vfs_unlink);
* writeout happening, and we don't want to prevent access to the directory
* while waiting on the I/O.
*/
-int do_unlinkat(int dfd, struct filename *name)
+int do_unlinkat(int dfd, struct filename *__name)
{
+ CLASS(filename_consume, name)(__name);
int error;
struct dentry *dentry;
struct path path;
@@ -5464,7 +5460,7 @@ int do_unlinkat(int dfd, struct filename *name)
retry:
error = filename_parentat(dfd, name, lookup_flags, &path, &last, &type);
if (error)
- goto exit_putname;
+ return error;
error = -EISDIR;
if (type != LAST_NORM)
@@ -5511,8 +5507,6 @@ int do_unlinkat(int dfd, struct filename *name)
lookup_flags |= LOOKUP_REVAL;
goto retry;
}
-exit_putname:
- putname(name);
return error;
}
--
2.47.3
Powered by blists - more mailing lists