DF-3573 / fix.diff
--- sys/dev/drm/radeon/cik.c.orig +++ sys/dev/drm/radeon/cik.c @@ -2081,6 +2081,8 @@ pr_err("cik_cp: Bogus length %zu in firmware \"%s\"\n", rdev->me_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->me_fw); @@ -2104,6 +2106,8 @@ pr_err("cik_cp: Bogus length %zu in firmware \"%s\"\n", rdev->ce_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->ce_fw); @@ -2127,6 +2131,8 @@ pr_err("cik_cp: Bogus length %zu in firmware \"%s\"\n", rdev->mec_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->mec_fw); @@ -2165,6 +2171,8 @@ pr_err("cik_rlc: Bogus length %zu in firmware \"%s\"\n", rdev->rlc_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->rlc_fw); @@ -2188,6 +2196,8 @@ pr_err("cik_sdma: Bogus length %zu in firmware \"%s\"\n", rdev->sdma_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->sdma_fw); @@ -2219,6 +2229,8 @@ rdev->mc_fw->datasize, fw_name); err = -EINVAL; } + if (err) + goto out; DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->datasize); } else { err = radeon_ucode_validate(rdev->mc_fw); @@ -2249,6 +2261,8 @@ pr_err("cik_smc: Bogus length %zu in firmware \"%s\"\n", rdev->smc_fw->datasize, fw_name); err = -EINVAL; + + goto out; } } else { err = radeon_ucode_validate(rdev->smc_fw); |