[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251216035518.4037331-50-viro@zeniv.linux.org.uk>
Date: Tue, 16 Dec 2025 03:55:08 +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 49/59] namei.c: switch user pathname imports to CLASS(filename{,_flags})
filename_flags is used by user_path_at(). I suspect that mixing
LOOKUP_EMPTY with real lookup flags had been a mistake all along; the
former belongs to pathname import, the latter - to pathwalk. Right now
none of the remaining in-tree callers of user_path_at() are getting
LOOKUP_EMPTY in flags, so user_path_at() could probably be switched
to CLASS(filename)...
Signed-off-by: Al Viro <viro@...iv.linux.org.uk>
---
fs/namei.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index e0c8d3832861..a564ca4f7ffd 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -3025,11 +3025,8 @@ struct dentry *start_removing_user_path_at(int dfd,
const char __user *name,
struct path *path)
{
- struct filename *filename = getname(name);
- struct dentry *res = __start_removing_path(dfd, filename, path);
-
- putname(filename);
- return res;
+ CLASS(filename, filename)(name);
+ return __start_removing_path(dfd, filename, path);
}
EXPORT_SYMBOL(start_removing_user_path_at);
@@ -3607,11 +3604,8 @@ int path_pts(struct path *path)
int user_path_at(int dfd, const char __user *name, unsigned flags,
struct path *path)
{
- struct filename *filename = getname_flags(name, flags);
- int ret = filename_lookup(dfd, filename, flags, path, NULL);
-
- putname(filename);
- return ret;
+ CLASS(filename_flags, filename)(name, flags);
+ return filename_lookup(dfd, filename, flags, path, NULL);
}
EXPORT_SYMBOL(user_path_at);
@@ -4970,11 +4964,8 @@ inline struct dentry *start_creating_user_path(
int dfd, const char __user *pathname,
struct path *path, unsigned int lookup_flags)
{
- struct filename *filename = getname(pathname);
- struct dentry *res = filename_create(dfd, filename, path, lookup_flags);
-
- putname(filename);
- return res;
+ CLASS(filename, filename)(pathname);
+ return filename_create(dfd, filename, path, lookup_flags);
}
EXPORT_SYMBOL(start_creating_user_path);
--
2.47.3
Powered by blists - more mailing lists