Skip to content

Commit 1816f4a

Browse files
johnharr-inteljlahtine-intel
authored andcommitted
drm/i915/guc: Actually return an error if GuC version range check fails
Dan Carpenter pointed out that 'err' was not being set in the case where the GuC firmware version range check fails. Fix that. Note that while this is a bug fix for a previous patch (see Fixes tag below). It is an exceedingly low risk bug. The range check is asserting that the GuC firmware version is within spec. So it should not be possible to ever have a firmware file that fails this check. If larger version numbers are required in the future, that would be a backwards breaking spec change and thus require a major version bump, in which case an old i915 driver would not load that new version anyway. Fixes: 9bbba06 ("drm/i915/guc: Use GuC submission API version number") Reported-by: Dan Carpenter <error27@gmail.com> Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Cc: John Harrison <John.C.Harrison@Intel.com> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Cc: Alan Previn <alan.previn.teres.alexis@intel.com> Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Andi Shyti <andi.shyti@linux.intel.com> Cc: Matthew Auld <matthew.auld@intel.com> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Lucas De Marchi <lucas.demarchi@intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230421224742.2357198-1-John.C.Harrison@Intel.com (cherry picked from commit 80ab317) Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
1 parent d944eaf commit 1816f4a

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -635,9 +635,10 @@ static bool is_ver_8bit(struct intel_uc_fw_ver *ver)
635635
return ver->major < 0xFF && ver->minor < 0xFF && ver->patch < 0xFF;
636636
}
637637

638-
static bool guc_check_version_range(struct intel_uc_fw *uc_fw)
638+
static int guc_check_version_range(struct intel_uc_fw *uc_fw)
639639
{
640640
struct intel_guc *guc = container_of(uc_fw, struct intel_guc, fw);
641+
struct intel_gt *gt = __uc_fw_to_gt(uc_fw);
641642

642643
/*
643644
* GuC version number components are defined as being 8-bits.
@@ -646,24 +647,24 @@ static bool guc_check_version_range(struct intel_uc_fw *uc_fw)
646647
*/
647648

648649
if (!is_ver_8bit(&uc_fw->file_selected.ver)) {
649-
gt_warn(__uc_fw_to_gt(uc_fw), "%s firmware: invalid file version: 0x%02X:%02X:%02X\n",
650+
gt_warn(gt, "%s firmware: invalid file version: 0x%02X:%02X:%02X\n",
650651
intel_uc_fw_type_repr(uc_fw->type),
651652
uc_fw->file_selected.ver.major,
652653
uc_fw->file_selected.ver.minor,
653654
uc_fw->file_selected.ver.patch);
654-
return false;
655+
return -EINVAL;
655656
}
656657

657658
if (!is_ver_8bit(&guc->submission_version)) {
658-
gt_warn(__uc_fw_to_gt(uc_fw), "%s firmware: invalid submit version: 0x%02X:%02X:%02X\n",
659+
gt_warn(gt, "%s firmware: invalid submit version: 0x%02X:%02X:%02X\n",
659660
intel_uc_fw_type_repr(uc_fw->type),
660661
guc->submission_version.major,
661662
guc->submission_version.minor,
662663
guc->submission_version.patch);
663-
return false;
664+
return -EINVAL;
664665
}
665666

666-
return true;
667+
return i915_inject_probe_error(gt->i915, -EINVAL);
667668
}
668669

669670
static int check_fw_header(struct intel_gt *gt,
@@ -772,8 +773,11 @@ int intel_uc_fw_fetch(struct intel_uc_fw *uc_fw)
772773
if (err)
773774
goto fail;
774775

775-
if (uc_fw->type == INTEL_UC_FW_TYPE_GUC && !guc_check_version_range(uc_fw))
776-
goto fail;
776+
if (uc_fw->type == INTEL_UC_FW_TYPE_GUC) {
777+
err = guc_check_version_range(uc_fw);
778+
if (err)
779+
goto fail;
780+
}
777781

778782
if (uc_fw->file_wanted.ver.major && uc_fw->file_selected.ver.major) {
779783
/* Check the file's major version was as it claimed */

0 commit comments

Comments
 (0)