diff options
author | 2024-11-25 15:10:17 +0100 | |
---|---|---|
committer | 2024-12-02 11:25:13 +0100 | |
commit | 62e5396c50ae3942ff94c0a8cec6f476c1c3da2f (patch) | |
tree | e6d4095f00d6dfc1e0ce0cf495862f6fe9b3298e | |
parent | cifs: avoid pointless cred reference count bump (diff) | |
download | wireguard-linux-62e5396c50ae3942ff94c0a8cec6f476c1c3da2f.tar.xz wireguard-linux-62e5396c50ae3942ff94c0a8cec6f476c1c3da2f.zip |
smb: avoid pointless cred reference count bump
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>
-rw-r--r-- | fs/smb/server/smb_common.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/fs/smb/server/smb_common.c b/fs/smb/server/smb_common.c index ec4106aa1945..d009651fd5a8 100644 --- a/fs/smb/server/smb_common.c +++ b/fs/smb/server/smb_common.c @@ -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) |