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>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <C562D0E12CBDE44E8A0CCAB77060096701941808E5@AVMB1.qlogic.org>
Date:	Tue, 26 May 2015 05:09:46 +0000
From:	Rajesh Borundia <rajesh.borundia@...gic.com>
To:	Vladimir Zapolskiy <vz@...ia.com>,
	David Miller <davem@...emloft.net>,
	Shahed Shaikh <shahed.shaikh@...gic.com>,
	Dept-GE Linux NIC Dev <Dept-GELinuxNICDev@...gic.com>
CC:	netdev <netdev@...r.kernel.org>
Subject: RE: [PATCH] net: qlcnic: clean up sysfs error codes

>-----Original Message-----
>From: dept_hsg_linux_nic_dev-bounces@...listserver.qlogic.com
>[mailto:dept_hsg_linux_nic_dev-bounces@...listserver.qlogic.com] On
>Behalf Of Vladimir Zapolskiy
>Sent: Tuesday, May 26, 2015 6:20 AM
>To: David Miller; Shahed Shaikh; Dept-GE Linux NIC Dev
>Cc: netdev
>Subject: [PATCH] net: qlcnic: clean up sysfs error codes
>
>Replace confusing QL_STATUS_INVALID_PARAM == -1 == -EPERM with -
>EINVAL and QLC_STATUS_UNSUPPORTED_CMD == -2 == -ENOENT with -
>EOPNOTSUPP, the latter error code is arguable, but it is already used in the
>driver, so let it be here as well.
>
>Also remove always false (!buf) check on read(), the driver should not care if
>userspace gets its EFAULT or not.
>
>Signed-off-by: Vladimir Zapolskiy <vz@...ia.com>
>---
> drivers/net/ethernet/qlogic/qlcnic/qlcnic.h       |  3 -
> drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c  |  2 +-
>drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c | 77 +++++++++++-----------
>-
> 3 files changed, 36 insertions(+), 46 deletions(-)

Hi Vladmir,

We will review the patch and get back to you.

Thanks,
Rajesh

>
>diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
>b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
>index f221126..055f376 100644
>--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
>+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
>@@ -1326,9 +1326,6 @@ struct qlcnic_eswitch {  };
>
>
>-/* Return codes for Error handling */
>-#define QL_STATUS_INVALID_PARAM	-1
>-
> #define MAX_BW			100	/* % of link speed */
> #define MIN_BW			1	/* % of link speed */
> #define MAX_VLAN_ID		4095
>diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
>b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
>index 367f397..2f6cc42 100644
>--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
>+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
>@@ -1031,7 +1031,7 @@ int qlcnic_init_pci_info(struct qlcnic_adapter
>*adapter)
> 		pfn = pci_info[i].id;
>
> 		if (pfn >= ahw->max_vnic_func) {
>-			ret = QL_STATUS_INVALID_PARAM;
>+			ret = -EINVAL;
> 			dev_err(&adapter->pdev->dev, "%s: Invalid function
>0x%x, max 0x%x\n",
> 				__func__, pfn, ahw->max_vnic_func);
> 			goto err_eswitch;
>diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
>b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
>index 59a721f..05c28f2 100644
>--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
>+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
>@@ -24,8 +24,6 @@
> #include <linux/hwmon-sysfs.h>
> #endif
>
>-#define QLC_STATUS_UNSUPPORTED_CMD	-2
>-
> int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *adapter, u32
>enable)  {
> 	return -EOPNOTSUPP;
>@@ -166,7 +164,7 @@ static int qlcnic_82xx_store_beacon(struct
>qlcnic_adapter *adapter,
> 	u8 b_state, b_rate;
>
> 	if (len != sizeof(u16))
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	memcpy(&beacon, buf, sizeof(u16));
> 	err = qlcnic_validate_beacon(adapter, beacon, &b_state, &b_rate);
>@@ -383,17 +381,17 @@ static int validate_pm_config(struct qlcnic_adapter
>*adapter,
> 		dest_pci_func = pm_cfg[i].dest_npar;
> 		src_index = qlcnic_is_valid_nic_func(adapter, src_pci_func);
> 		if (src_index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
>
> 		dest_index = qlcnic_is_valid_nic_func(adapter,
>dest_pci_func);
> 		if (dest_index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
>
> 		s_esw_id = adapter->npars[src_index].phy_port;
> 		d_esw_id = adapter->npars[dest_index].phy_port;
>
> 		if (s_esw_id != d_esw_id)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 	}
>
> 	return 0;
>@@ -414,7 +412,7 @@ static ssize_t qlcnic_sysfs_write_pm_config(struct file
>*filp,
> 	count	= size / sizeof(struct qlcnic_pm_func_cfg);
> 	rem	= size % sizeof(struct qlcnic_pm_func_cfg);
> 	if (rem)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
> 	pm_cfg = (struct qlcnic_pm_func_cfg *)buf; @@ -427,7 +425,7 @@
>static ssize_t qlcnic_sysfs_write_pm_config(struct file *filp,
> 		action = !!pm_cfg[i].action;
> 		index = qlcnic_is_valid_nic_func(adapter, pci_func);
> 		if (index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
>
> 		id = adapter->npars[index].phy_port;
> 		ret = qlcnic_config_port_mirroring(adapter, id, @@ -440,7
>+438,7 @@ static ssize_t qlcnic_sysfs_write_pm_config(struct file *filp,
> 		pci_func = pm_cfg[i].pci_func;
> 		index = qlcnic_is_valid_nic_func(adapter, pci_func);
> 		if (index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 		id = adapter->npars[index].phy_port;
> 		adapter->npars[index].enable_pm = !!pm_cfg[i].action;
> 		adapter->npars[index].dest_npar = id; @@ -499,11 +497,11
>@@ static int validate_esw_config(struct qlcnic_adapter *adapter,
> 	for (i = 0; i < count; i++) {
> 		pci_func = esw_cfg[i].pci_func;
> 		if (pci_func >= ahw->max_vnic_func)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
>
> 		if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC)
> 			if (qlcnic_is_valid_nic_func(adapter, pci_func) < 0)
>-				return QL_STATUS_INVALID_PARAM;
>+				return -EINVAL;
>
> 		switch (esw_cfg[i].op_mode) {
> 		case QLCNIC_PORT_DEFAULTS:
>@@ -517,25 +515,25 @@ static int validate_esw_config(struct qlcnic_adapter
>*adapter,
>
> 			if (ret != QLCNIC_NON_PRIV_FUNC) {
> 				if (esw_cfg[i].mac_anti_spoof != 0)
>-					return QL_STATUS_INVALID_PARAM;
>+					return -EINVAL;
> 				if (esw_cfg[i].mac_override != 1)
>-					return QL_STATUS_INVALID_PARAM;
>+					return -EINVAL;
> 				if (esw_cfg[i].promisc_mode != 1)
>-					return QL_STATUS_INVALID_PARAM;
>+					return -EINVAL;
> 			}
> 			break;
> 		case QLCNIC_ADD_VLAN:
> 			if (!IS_VALID_VLAN(esw_cfg[i].vlan_id))
>-				return QL_STATUS_INVALID_PARAM;
>+				return -EINVAL;
> 			if (!esw_cfg[i].op_type)
>-				return QL_STATUS_INVALID_PARAM;
>+				return -EINVAL;
> 			break;
> 		case QLCNIC_DEL_VLAN:
> 			if (!esw_cfg[i].op_type)
>-				return QL_STATUS_INVALID_PARAM;
>+				return -EINVAL;
> 			break;
> 		default:
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 		}
> 	}
>
>@@ -559,7 +557,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file
>*file,
> 	count	= size / sizeof(struct qlcnic_esw_func_cfg);
> 	rem	= size % sizeof(struct qlcnic_esw_func_cfg);
> 	if (rem)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
> 	esw_cfg = (struct qlcnic_esw_func_cfg *)buf; @@ -570,7 +568,7 @@
>static ssize_t qlcnic_sysfs_write_esw_config(struct file *file,
> 	for (i = 0; i < count; i++) {
> 		if (adapter->ahw->op_mode == QLCNIC_MGMT_FUNC)
> 			if (qlcnic_config_switch_port(adapter, &esw_cfg[i]))
>-				return QL_STATUS_INVALID_PARAM;
>+				return -EINVAL;
>
> 		if (adapter->ahw->pci_func != esw_cfg[i].pci_func)
> 			continue;
>@@ -604,7 +602,7 @@ static ssize_t qlcnic_sysfs_write_esw_config(struct file
>*file,
> 		pci_func = esw_cfg[i].pci_func;
> 		index = qlcnic_is_valid_nic_func(adapter, pci_func);
> 		if (index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 		npar = &adapter->npars[index];
> 		switch (esw_cfg[i].op_mode) {
> 		case QLCNIC_PORT_DEFAULTS:
>@@ -654,7 +652,7 @@ static ssize_t qlcnic_sysfs_read_esw_config(struct file
>*file,
>
> 		esw_cfg[pci_func].pci_func = pci_func;
> 		if (qlcnic_get_eswitch_port_config(adapter,
>&esw_cfg[pci_func]))
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 	}
> 	qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
> 	return size;
>@@ -669,11 +667,11 @@ static int validate_npar_config(struct qlcnic_adapter
>*adapter,
> 	for (i = 0; i < count; i++) {
> 		pci_func = np_cfg[i].pci_func;
> 		if (qlcnic_is_valid_nic_func(adapter, pci_func) < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
>
> 		if (!IS_VALID_BW(np_cfg[i].min_bw) ||
> 		    !IS_VALID_BW(np_cfg[i].max_bw))
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 	}
> 	return 0;
> }
>@@ -694,7 +692,7 @@ static ssize_t qlcnic_sysfs_write_npar_config(struct file
>*file,
> 	count	= size / sizeof(struct qlcnic_npar_func_cfg);
> 	rem	= size % sizeof(struct qlcnic_npar_func_cfg);
> 	if (rem)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	qlcnic_swap32_buffer((u32 *)buf, size / sizeof(u32));
> 	np_cfg = (struct qlcnic_npar_func_cfg *)buf; @@ -717,7 +715,7 @@
>static ssize_t qlcnic_sysfs_write_npar_config(struct file *file,
> 			return ret;
> 		index = qlcnic_is_valid_nic_func(adapter, pci_func);
> 		if (index < 0)
>-			return QL_STATUS_INVALID_PARAM;
>+			return -EINVAL;
> 		adapter->npars[index].min_bw = nic_info.min_tx_bw;
> 		adapter->npars[index].max_bw = nic_info.max_tx_bw;
> 	}
>@@ -784,13 +782,13 @@ static ssize_t qlcnic_sysfs_get_port_stats(struct file
>*file,
> 	int ret;
>
> 	if (qlcnic_83xx_check(adapter))
>-		return QLC_STATUS_UNSUPPORTED_CMD;
>+		return -EOPNOTSUPP;
>
> 	if (size != sizeof(struct qlcnic_esw_statistics))
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	if (offset >= adapter->ahw->max_vnic_func)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	memset(&port_stats, 0, size);
> 	ret = qlcnic_get_port_stats(adapter, offset,
>QLCNIC_QUERY_RX_COUNTER, @@ -819,13 +817,13 @@ static ssize_t
>qlcnic_sysfs_get_esw_stats(struct file *file,
> 	int ret;
>
> 	if (qlcnic_83xx_check(adapter))
>-		return QLC_STATUS_UNSUPPORTED_CMD;
>+		return -EOPNOTSUPP;
>
> 	if (size != sizeof(struct qlcnic_esw_statistics))
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	memset(&esw_stats, 0, size);
> 	ret = qlcnic_get_eswitch_stats(adapter, offset,
>QLCNIC_QUERY_RX_COUNTER, @@ -853,10 +851,10 @@ static ssize_t
>qlcnic_sysfs_clear_esw_stats(struct file *file,
> 	int ret;
>
> 	if (qlcnic_83xx_check(adapter))
>-		return QLC_STATUS_UNSUPPORTED_CMD;
>+		return -EOPNOTSUPP;
>
> 	if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_ESWITCH,
>offset,
> 				     QLCNIC_QUERY_RX_COUNTER);
>@@ -883,10 +881,10 @@ static ssize_t qlcnic_sysfs_clear_port_stats(struct
>file *file,
> 	int ret;
>
> 	if (qlcnic_83xx_check(adapter))
>-		return QLC_STATUS_UNSUPPORTED_CMD;
>+		return -EOPNOTSUPP;
>
> 	if (offset >= adapter->ahw->max_vnic_func)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_PORT, offset,
> 				     QLCNIC_QUERY_RX_COUNTER);
>@@ -953,9 +951,7 @@ static ssize_t
>qlcnic_83xx_sysfs_flash_read_handler(struct file *filp,
> 	struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
>
> 	if (!size)
>-		return QL_STATUS_INVALID_PARAM;
>-	if (!buf)
>-		return QL_STATUS_INVALID_PARAM;
>+		return -EINVAL;
>
> 	count = size / sizeof(u32);
>
>@@ -1132,9 +1128,6 @@ static ssize_t
>qlcnic_83xx_sysfs_flash_write_handler(struct file *filp,
> 	struct device *dev = container_of(kobj, struct device, kobj);
> 	struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
>
>-	if (!buf)
>-		return QL_STATUS_INVALID_PARAM;
>-
> 	ret = kstrtoul(buf, 16, &data);
>
> 	switch (data) {
>--
>2.1.4

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ