[v2] net/mlx5: fix build with clang 14

Message ID 20220511164109.1574109-1-alialnu@nvidia.com (mailing list archive)
State Accepted, archived
Delegated to: Raslan Darawsheh
Headers
Series [v2] net/mlx5: fix build with clang 14 |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/github-robot: build success github build: passed
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS

Commit Message

Ali Alnubani May 11, 2022, 4:41 p.m. UTC
  Use fgets instead of fscanf to resolve the following warning
reported by clang 14.0.0 in Fedora 37 (Rawhide):

drivers/net/mlx5/linux/mlx5_ethdev_os.c:1137:52: error:
  'fscanf' may overflow; destination buffer in argument 3 has size 16,
  but the corresponding specifier may require size 17
  [-Werror,-Wfortify-source]
  ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);

Fixes: 63d1db710fbc ("net/mlx5: fix unlimited parsing of switch info")
Cc: michaelba@mellanox.com
Cc: stable@dpdk.org

Signed-off-by: Ali Alnubani <alialnu@nvidia.com>
---
Changes in v2:
	- Removed unnecessary variable.

 drivers/net/mlx5/linux/mlx5_ethdev_os.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
  

Comments

Thomas Monjalon June 15, 2022, 8:16 a.m. UTC | #1
11/05/2022 18:41, Ali Alnubani:
> Use fgets instead of fscanf to resolve the following warning
> reported by clang 14.0.0 in Fedora 37 (Rawhide):
> 
> drivers/net/mlx5/linux/mlx5_ethdev_os.c:1137:52: error:
>   'fscanf' may overflow; destination buffer in argument 3 has size 16,
>   but the corresponding specifier may require size 17
>   [-Werror,-Wfortify-source]
>   ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);

Some other patches are proposing to declare the variable
of size IF_NAMESIZE+1 but I think it's wrong because
IF_NAMESIZE includes a terminating null byte.

> Fixes: 63d1db710fbc ("net/mlx5: fix unlimited parsing of switch info")
> Cc: michaelba@mellanox.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ali Alnubani <alialnu@nvidia.com>
[...]
> -		ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);
> -		fclose(file);
> -		if (ret == 1)
> +		if (fgets(port_name, IF_NAMESIZE, file) != NULL)
>  			mlx5_translate_port_name(port_name, &data);
> +		fclose(file);

Acked-by: Thomas Monjalon <thomas@monjalon.net>
  
Slava Ovsiienko June 15, 2022, 8:21 a.m. UTC | #2
> -----Original Message-----
> From: Ali Alnubani <alialnu@nvidia.com>
> Sent: Wednesday, May 11, 2022 19:41
> To: dev@dpdk.org
> Cc: Michael Baum <michaelba@nvidia.com>; stable@dpdk.org
> Subject: [PATCH v2] net/mlx5: fix build with clang 14
> 
> Use fgets instead of fscanf to resolve the following warning reported by clang
> 14.0.0 in Fedora 37 (Rawhide):
> 
> drivers/net/mlx5/linux/mlx5_ethdev_os.c:1137:52: error:
>   'fscanf' may overflow; destination buffer in argument 3 has size 16,
>   but the corresponding specifier may require size 17
>   [-Werror,-Wfortify-source]
>   ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);
> 
> Fixes: 63d1db710fbc ("net/mlx5: fix unlimited parsing of switch info")
> Cc: michaelba@mellanox.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ali Alnubani <alialnu@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
  
David Marchand June 15, 2022, 8:41 a.m. UTC | #3
On Wed, Jun 15, 2022 at 10:17 AM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> 11/05/2022 18:41, Ali Alnubani:
> > Use fgets instead of fscanf to resolve the following warning
> > reported by clang 14.0.0 in Fedora 37 (Rawhide):
> >
> > drivers/net/mlx5/linux/mlx5_ethdev_os.c:1137:52: error:
> >   'fscanf' may overflow; destination buffer in argument 3 has size 16,
> >   but the corresponding specifier may require size 17
> >   [-Werror,-Wfortify-source]
> >   ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);
>
> Some other patches are proposing to declare the variable
> of size IF_NAMESIZE+1 but I think it's wrong because
> IF_NAMESIZE includes a terminating null byte.

Ack, I rejected my patch accordingly.
  
Raslan Darawsheh June 15, 2022, 10:08 a.m. UTC | #4
Hi,

> -----Original Message-----
> From: Ali Alnubani <alialnu@nvidia.com>
> Sent: Wednesday, May 11, 2022 7:41 PM
> To: dev@dpdk.org
> Cc: Michael Baum <michaelba@nvidia.com>; stable@dpdk.org
> Subject: [PATCH v2] net/mlx5: fix build with clang 14
> 
> Use fgets instead of fscanf to resolve the following warning reported by
> clang 14.0.0 in Fedora 37 (Rawhide):
> 
> drivers/net/mlx5/linux/mlx5_ethdev_os.c:1137:52: error:
>   'fscanf' may overflow; destination buffer in argument 3 has size 16,
>   but the corresponding specifier may require size 17
>   [-Werror,-Wfortify-source]
>   ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);
> 
> Fixes: 63d1db710fbc ("net/mlx5: fix unlimited parsing of switch info")
> Cc: michaelba@mellanox.com
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ali Alnubani <alialnu@nvidia.com>
> ---
> Changes in v2:
> 	- Removed unnecessary variable.
> 

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh
  

Patch

diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
index 8fe73f1adb..4db94c5917 100644
--- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
@@ -1118,7 +1118,6 @@  mlx5_sysfs_switch_info(unsigned int ifindex, struct mlx5_switch_info *info)
 	bool port_switch_id_set = false;
 	bool device_dir = false;
 	char c;
-	int ret;
 
 	if (!if_indextoname(ifindex, ifname)) {
 		rte_errno = errno;
@@ -1134,10 +1133,9 @@  mlx5_sysfs_switch_info(unsigned int ifindex, struct mlx5_switch_info *info)
 
 	file = fopen(phys_port_name, "rb");
 	if (file != NULL) {
-		ret = fscanf(file, "%" RTE_STR(IF_NAMESIZE) "s", port_name);
-		fclose(file);
-		if (ret == 1)
+		if (fgets(port_name, IF_NAMESIZE, file) != NULL)
 			mlx5_translate_port_name(port_name, &data);
+		fclose(file);
 	}
 	file = fopen(phys_switch_id, "rb");
 	if (file == NULL) {