]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
smb: avoid pointless cred reference count bump
authorChristian Brauner <brauner@kernel.org>
Mon, 25 Nov 2024 14:10:17 +0000 (15:10 +0100)
committerChristian Brauner <brauner@kernel.org>
Mon, 2 Dec 2024 10:25:13 +0000 (11:25 +0100)
The creds are allocated via prepare_kernel_cred() which has already
taken a reference.

This also removes a pointless check that gives the impression that
override_creds() can ever be called on a task with current->cred NULL.
That's not possible afaict. Remove the check to not imply that there can
be a dangling pointer in current->cred.

Link: https://lore.kernel.org/r/20241125-work-cred-v2-21-68b9d38bb5b2@kernel.org
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/smb/server/smb_common.c

index ec4106aa19456fd928bba1e968ed56b93925ca6a..d009651fd5a8f80db16760ac1f93b6e92a08e9a4 100644 (file)
@@ -780,11 +780,7 @@ int __ksmbd_override_fsids(struct ksmbd_work *work,
                cred->cap_effective = cap_drop_fs_set(cred->cap_effective);
 
        WARN_ON(work->saved_cred);
-       work->saved_cred = override_creds(get_new_cred(cred));
-       if (!work->saved_cred) {
-               abort_creds(cred);
-               return -EINVAL;
-       }
+       work->saved_cred = override_creds(cred);
        return 0;
 }
 
@@ -796,13 +792,11 @@ int ksmbd_override_fsids(struct ksmbd_work *work)
 void ksmbd_revert_fsids(struct ksmbd_work *work)
 {
        const struct cred *cred;
-
        WARN_ON(!work->saved_cred);
 
-       cred = current_cred();
-       put_cred(revert_creds(work->saved_cred));
-       put_cred(cred);
+       cred = revert_creds(work->saved_cred);
        work->saved_cred = NULL;
+       put_cred(cred);
 }
 
 __le32 smb_map_generic_desired_access(__le32 daccess)