--- sys/dev/drm/amd/amdgpu/sdma_v3_0.c +++ sys/dev/drm/amd/amdgpu/sdma_v3_0.c @@ -312,6 +312,13 @@ err = amdgpu_ucode_validate(adev->sdma.instance[i].fw); if (err) goto out; + if (adev->sdma.instance[i].fw->datasize < + sizeof(struct sdma_firmware_header_v1_0)) { + pr_err("sdma_v3_0: firmware \"%s\" too small (%zu bytes)\n", + fw_name, adev->sdma.instance[i].fw->datasize); + err = -EINVAL; + goto out; + } hdr = (const struct sdma_firmware_header_v1_0 *)adev->sdma.instance[i].fw->data; adev->sdma.instance[i].fw_version = le32_to_cpu(hdr->header.ucode_version); adev->sdma.instance[i].feature_version = le32_to_cpu(hdr->ucode_feature_version);