Skip to content

Commit b9e3594

Browse files
committed
firmware: don't copy kernel creds
No need to copy kernel credentials. Link: https://patch.msgid.link/20251103-work-creds-init_cred-v1-5-cb3ec8711a6a@kernel.org Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent ae40e6c commit b9e3594

1 file changed

Lines changed: 25 additions & 34 deletions

File tree

  • drivers/base/firmware_loader

drivers/base/firmware_loader/main.c

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -829,8 +829,6 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
829829
size_t offset, u32 opt_flags)
830830
{
831831
struct firmware *fw = NULL;
832-
struct cred *kern_cred = NULL;
833-
const struct cred *old_cred;
834832
bool nondirect = false;
835833
int ret;
836834

@@ -871,45 +869,38 @@ _request_firmware(const struct firmware **firmware_p, const char *name,
871869
* called by a driver when serving an unrelated request from userland, we use
872870
* the kernel credentials to read the file.
873871
*/
874-
kern_cred = prepare_kernel_cred(&init_task);
875-
if (!kern_cred) {
876-
ret = -ENOMEM;
877-
goto out;
878-
}
879-
old_cred = override_creds(kern_cred);
872+
scoped_with_kernel_creds() {
873+
ret = fw_get_filesystem_firmware(device, fw->priv, "", NULL);
880874

881-
ret = fw_get_filesystem_firmware(device, fw->priv, "", NULL);
882-
883-
/* Only full reads can support decompression, platform, and sysfs. */
884-
if (!(opt_flags & FW_OPT_PARTIAL))
885-
nondirect = true;
875+
/* Only full reads can support decompression, platform, and sysfs. */
876+
if (!(opt_flags & FW_OPT_PARTIAL))
877+
nondirect = true;
886878

887879
#ifdef CONFIG_FW_LOADER_COMPRESS_ZSTD
888-
if (ret == -ENOENT && nondirect)
889-
ret = fw_get_filesystem_firmware(device, fw->priv, ".zst",
890-
fw_decompress_zstd);
880+
if (ret == -ENOENT && nondirect)
881+
ret = fw_get_filesystem_firmware(device, fw->priv, ".zst",
882+
fw_decompress_zstd);
891883
#endif
892884
#ifdef CONFIG_FW_LOADER_COMPRESS_XZ
893-
if (ret == -ENOENT && nondirect)
894-
ret = fw_get_filesystem_firmware(device, fw->priv, ".xz",
895-
fw_decompress_xz);
885+
if (ret == -ENOENT && nondirect)
886+
ret = fw_get_filesystem_firmware(device, fw->priv, ".xz",
887+
fw_decompress_xz);
896888
#endif
897-
if (ret == -ENOENT && nondirect)
898-
ret = firmware_fallback_platform(fw->priv);
889+
if (ret == -ENOENT && nondirect)
890+
ret = firmware_fallback_platform(fw->priv);
899891

900-
if (ret) {
901-
if (!(opt_flags & FW_OPT_NO_WARN))
902-
dev_warn(device,
903-
"Direct firmware load for %s failed with error %d\n",
904-
name, ret);
905-
if (nondirect)
906-
ret = firmware_fallback_sysfs(fw, name, device,
907-
opt_flags, ret);
908-
} else
909-
ret = assign_fw(fw, device);
910-
911-
revert_creds(old_cred);
912-
put_cred(kern_cred);
892+
if (ret) {
893+
if (!(opt_flags & FW_OPT_NO_WARN))
894+
dev_warn(device,
895+
"Direct firmware load for %s failed with error %d\n",
896+
name, ret);
897+
if (nondirect)
898+
ret = firmware_fallback_sysfs(fw, name, device,
899+
opt_flags, ret);
900+
} else {
901+
ret = assign_fw(fw, device);
902+
}
903+
}
913904

914905
out:
915906
if (ret < 0) {

0 commit comments

Comments
 (0)