]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fs: pull up trailing slashes check for O_CREAT
authorChristian Brauner <brauner@kernel.org>
Thu, 8 Aug 2024 09:12:50 +0000 (11:12 +0200)
committerChristian Brauner <brauner@kernel.org>
Fri, 30 Aug 2024 06:22:35 +0000 (08:22 +0200)
Perform the check for trailing slashes right in the fastpath check and
don't bother with any additional work.

Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/namei.c

index 745415fcda5700ee7115cbbf6efa131e2c7b01a0..08eb9a53beb7881c90851910888a8a416ec03386 100644 (file)
@@ -3618,6 +3618,9 @@ static struct dentry *lookup_fast_for_open(struct nameidata *nd, int open_flag)
        struct dentry *dentry;
 
        if (open_flag & O_CREAT) {
+               if (trailing_slashes(nd))
+                       return ERR_PTR(-EISDIR);
+
                /* Don't bother on an O_EXCL create */
                if (open_flag & O_EXCL)
                        return NULL;
@@ -3684,20 +3687,13 @@ static const char *open_last_lookups(struct nameidata *nd,
                        bool unlazied;
 
                        /* can stay in rcuwalk if not auditing */
-                       if (dentry && audit_dummy_context()) {
-                               if (trailing_slashes(nd))
-                                       return ERR_PTR(-EISDIR);
+                       if (dentry && audit_dummy_context())
                                goto finish_lookup;
-                       }
                        unlazied = dentry ? try_to_unlazy_next(nd, dentry) :
                                            try_to_unlazy(nd);
                        if (!unlazied)
                                return ERR_PTR(-ECHILD);
                }
-               if (trailing_slashes(nd)) {
-                       dput(dentry);
-                       return ERR_PTR(-EISDIR);
-               }
                if (dentry)
                        goto finish_lookup;
        }