lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <4b50017b-d3f6-45c8-b4a0-6943c7a7e54e@web.de>
Date: Fri, 16 Feb 2024 10:50:27 +0100
From: Markus Elfring <Markus.Elfring@....de>
To: linux-wireless@...r.kernel.org, kernel-janitors@...r.kernel.org,
 Alon Giladi <alon.giladi@...el.com>,
 Anjaneyulu <pagadala.yesu.anjaneyulu@...el.com>,
 Dan Carpenter <dan.carpenter@...aro.org>,
 Gregory Greenman <gregory.greenman@...el.com>,
 Johannes Berg <johannes.berg@...el.com>, Kalle Valo <kvalo@...nel.org>
Cc: LKML <linux-kernel@...r.kernel.org>
Subject: [PATCH] iwlwifi: Use common error handling code in five functions

From: Markus Elfring <elfring@...rs.sourceforge.net>
Date: Fri, 16 Feb 2024 10:22:20 +0100

The error code “-EINVAL” was set before the statement “goto out_free”
multiple times in some function implementations.
Add jump targets so that a bit of exception handling can be better reused
at the end of these functions.

This issue was transformed by using the Coccinelle software.

Signed-off-by: Markus Elfring <elfring@...rs.sourceforge.net>
---
 drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 130 +++++++++----------
 1 file changed, 58 insertions(+), 72 deletions(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
index 4caf2e25a297..0d7a2f2eab07 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/acpi.c
@@ -285,8 +285,7 @@ int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt,
 		wifi_pkg->package.elements[1].type == ACPI_TYPE_INTEGER) {
 		enabled = !!wifi_pkg->package.elements[1].integer.value;
 	} else {
-		ret = -EINVAL;
-		goto out_free;
+		goto out_e_inval;
 	}

 	if (!enabled) {
@@ -301,8 +300,7 @@ int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt,
 	    IWL_WTAS_BLACK_LIST_MAX) {
 		IWL_DEBUG_RADIO(fwrt, "TAS invalid array size %llu\n",
 				wifi_pkg->package.elements[2].integer.value);
-		ret = -EINVAL;
-		goto out_free;
+		goto out_e_inval;
 	}
 	block_list_size = wifi_pkg->package.elements[2].integer.value;
 	tas_data->block_list_size = cpu_to_le32(block_list_size);
@@ -316,8 +314,7 @@ int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt,
 		    ACPI_TYPE_INTEGER) {
 			IWL_DEBUG_RADIO(fwrt,
 					"TAS invalid array elem %d\n", 3 + i);
-			ret = -EINVAL;
-			goto out_free;
+			goto out_e_inval;
 		}

 		country = wifi_pkg->package.elements[3 + i].integer.value;
@@ -329,6 +326,10 @@ int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt,
 out_free:
 	kfree(data);
 	return ret;
+
+out_e_inval:
+	ret = -EINVAL;
+	goto out_free;
 }

 int iwl_acpi_get_mcc(struct iwl_fw_runtime *fwrt, char *mcc)
@@ -474,10 +475,8 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_WRDS_WIFI_DATA_SIZE_REV2,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 2) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 2)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV2;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV2;
@@ -490,10 +489,8 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_WRDS_WIFI_DATA_SIZE_REV1,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 1) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 1)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV1;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV1;
@@ -506,10 +503,8 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_WRDS_WIFI_DATA_SIZE_REV0,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 0) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 0)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV0;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV0;
@@ -521,10 +516,8 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
 	goto out_free;

 read_table:
-	if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER) {
-		ret = -EINVAL;
-		goto out_free;
-	}
+	if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER)
+		goto out_e_inval;

 	IWL_DEBUG_RADIO(fwrt, "Reading WRDS tbl_rev=%d\n", tbl_rev);

@@ -543,6 +536,10 @@ int iwl_acpi_get_wrds_table(struct iwl_fw_runtime *fwrt)
 out_free:
 	kfree(data);
 	return ret;
+
+out_e_inval:
+	ret = -EINVAL;
+	goto out_free;
 }

 int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
@@ -562,10 +559,8 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_EWRD_WIFI_DATA_SIZE_REV2,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 2) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 2)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV2;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV2;
@@ -578,10 +573,8 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_EWRD_WIFI_DATA_SIZE_REV1,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 1) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 1)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV1;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV1;
@@ -594,10 +587,8 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
 					 ACPI_EWRD_WIFI_DATA_SIZE_REV0,
 					 &tbl_rev);
 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 0) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 0)
+			goto out_e_inval;

 		num_chains = ACPI_SAR_NUM_CHAINS_REV0;
 		num_sub_bands = ACPI_SAR_NUM_SUB_BANDS_REV0;
@@ -610,10 +601,8 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)

 read_table:
 	if (wifi_pkg->package.elements[1].type != ACPI_TYPE_INTEGER ||
-	    wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER) {
-		ret = -EINVAL;
-		goto out_free;
-	}
+	    wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER)
+		goto out_e_inval;

 	enabled = !!(wifi_pkg->package.elements[1].integer.value);
 	n_profiles = wifi_pkg->package.elements[2].integer.value;
@@ -623,10 +612,8 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
 	 * from index 1, so the maximum value allowed here is
 	 * ACPI_SAR_PROFILES_NUM - 1.
 	 */
-	if (n_profiles >= BIOS_SAR_MAX_PROFILE_NUM) {
-		ret = -EINVAL;
-		goto out_free;
-	}
+	if (n_profiles >= BIOS_SAR_MAX_PROFILE_NUM)
+		goto out_e_inval;

 	/* the tables start at element 3 */
 	pos = 3;
@@ -651,6 +638,10 @@ int iwl_acpi_get_ewrd_table(struct iwl_fw_runtime *fwrt)
 out_free:
 	kfree(data);
 	return ret;
+
+out_e_inval:
+	ret = -EINVAL;
+	goto out_free;
 }

 int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
@@ -724,10 +715,9 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
 				entry = &wifi_pkg->package.elements[entry_idx];
 				entry_idx++;
 				if (entry->type != ACPI_TYPE_INTEGER ||
-				    entry->integer.value > num_profiles) {
-					ret = -EINVAL;
-					goto out_free;
-				}
+				    entry->integer.value > num_profiles)
+					goto out_e_inval;
+
 				num_profiles = entry->integer.value;

 				/*
@@ -736,10 +726,8 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
 				 * looking up in ACPI
 				 */
 				if (wifi_pkg->package.count !=
-				    hdr_size + profile_size * num_profiles) {
-					ret = -EINVAL;
-					goto out_free;
-				}
+				    hdr_size + profile_size * num_profiles)
+					goto out_e_inval;
 			}
 			goto read_table;
 		}
@@ -769,10 +757,8 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
 				entry = &wifi_pkg->package.elements[entry_idx];
 				entry_idx++;
 				if (entry->type != ACPI_TYPE_INTEGER ||
-				    entry->integer.value > U8_MAX) {
-					ret = -EINVAL;
-					goto out_free;
-				}
+				    entry->integer.value > U8_MAX)
+					goto out_e_inval;

 				fwrt->geo_profiles[i].bands[j].max =
 					entry->integer.value;
@@ -787,10 +773,8 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
 					entry = &wifi_pkg->package.elements[entry_idx];
 					entry_idx++;
 					if (entry->type != ACPI_TYPE_INTEGER ||
-					    entry->integer.value > U8_MAX) {
-						ret = -EINVAL;
-						goto out_free;
-					}
+					    entry->integer.value > U8_MAX)
+						goto out_e_inval;

 					fwrt->geo_profiles[i].bands[j].chains[k] =
 						entry->integer.value;
@@ -805,6 +789,10 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt)
 out_free:
 	kfree(data);
 	return ret;
+
+out_e_inval:
+	ret = -EINVAL;
+	goto out_free;
 }

 int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
@@ -829,8 +817,7 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
 					tbl_rev);
 			goto read_table;
 		} else {
-			ret = -EINVAL;
-			goto out_free;
+			goto out_e_inval;
 		}
 	}

@@ -839,10 +826,9 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
 			ACPI_PPAG_WIFI_DATA_SIZE_V1, &tbl_rev);

 	if (!IS_ERR(wifi_pkg)) {
-		if (tbl_rev != 0) {
-			ret = -EINVAL;
-			goto out_free;
-		}
+		if (tbl_rev != 0)
+			goto out_e_inval;
+
 		num_sub_bands = IWL_NUM_SUB_BANDS_V1;
 		IWL_DEBUG_RADIO(fwrt, "Reading PPAG table v1 (tbl_rev=0)\n");
 		goto read_table;
@@ -855,10 +841,8 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
 	fwrt->ppag_ver = tbl_rev;
 	flags = &wifi_pkg->package.elements[1];

-	if (flags->type != ACPI_TYPE_INTEGER) {
-		ret = -EINVAL;
-		goto out_free;
-	}
+	if (flags->type != ACPI_TYPE_INTEGER)
+		goto out_e_inval;

 	fwrt->ppag_flags = iwl_bios_get_ppag_flags(flags->integer.value,
 						   fwrt->ppag_ver);
@@ -873,10 +857,8 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
 			union acpi_object *ent;

 			ent = &wifi_pkg->package.elements[idx++];
-			if (ent->type != ACPI_TYPE_INTEGER) {
-				ret = -EINVAL;
-				goto out_free;
-			}
+			if (ent->type != ACPI_TYPE_INTEGER)
+				goto out_e_inval;

 			fwrt->ppag_chains[i].subbands[j] = ent->integer.value;
 		}
@@ -887,6 +869,10 @@ int iwl_acpi_get_ppag_table(struct iwl_fw_runtime *fwrt)
 out_free:
 	kfree(data);
 	return ret;
+
+out_e_inval:
+	ret = -EINVAL;
+	goto out_free;
 }

 void iwl_acpi_get_phy_filters(struct iwl_fw_runtime *fwrt,
--
2.43.0


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ