⬢ DragonFlyBSD Kernel Audit
DF-4238 / fix.diff
← back to finding ↓ download raw
--- 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);