@@ -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
914905out :
915906 if (ret < 0 ) {
0 commit comments