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