Skip to content

Commit 1296e8d

Browse files
david-marchandraslandarawsheh
authored andcommitted
net/mlx5: fix leak in sysfs port name translation
getline() may allocate a buffer even though it returns -1: """ If *lineptr is set to NULL before the call, then getline() will allocate a buffer for storing the line. This buffer should be freed by the user program even if getline() failed. """ This leak has been observed on a RHEL8 system with two CX5 PF devices (no VFs). ASan reports: ==8899==ERROR: LeakSanitizer: detected memory leaks Direct leak of 120 byte(s) in 1 object(s) allocated from: #0 0x7fe58576aba8 in __interceptor_malloc (/lib64/libasan.so.5+0xefba8) #1 0x7fe583e866b2 in __getdelim (/lib64/libc.so.6+0x886b2) #2 0x327bd23 in mlx5_sysfs_switch_info ../drivers/net/mlx5/linux/mlx5_ethdev_os.c:1084 #3 0x3271f86 in mlx5_os_pci_probe_pf ../drivers/net/mlx5/linux/mlx5_os.c:2282 #4 0x3273c83 in mlx5_os_pci_probe ../drivers/net/mlx5/linux/mlx5_os.c:2497 DPDK#5 0x327475f in mlx5_os_net_probe ../drivers/net/mlx5/linux/mlx5_os.c:2578 DPDK#6 0xc6eac7 in drivers_probe ../drivers/common/mlx5/mlx5_common.c:937 DPDK#7 0xc6f150 in mlx5_common_dev_probe ../drivers/common/mlx5/mlx5_common.c:1027 DPDK#8 0xc8ef80 in mlx5_common_pci_probe ../drivers/common/mlx5/mlx5_common_pci.c:168 DPDK#9 0xc21b67 in rte_pci_probe_one_driver ../drivers/bus/pci/pci_common.c:312 DPDK#10 0xc2224c in pci_probe_all_drivers ../drivers/bus/pci/pci_common.c:396 DPDK#11 0xc222f4 in pci_probe ../drivers/bus/pci/pci_common.c:423 DPDK#12 0xb71fff in rte_bus_probe ../lib/eal/common/eal_common_bus.c:78 DPDK#13 0xbe6888 in rte_eal_init ../lib/eal/linux/eal.c:1300 DPDK#14 0x5ec717 in main ../app/test-pmd/testpmd.c:4515 DPDK#15 0x7fe583e38d84 in __libc_start_main (/lib64/libc.so.6+0x3ad84) As far as why getline() errors, strace gives a hint: 8516 openat(AT_FDCWD, "/sys/class/net/enp130s0f0/phys_port_name", O_RDONLY) = 34 8516 fstat(34, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0 8516 read(34, 0x621000098900, 4096) = -1 EOPNOTSUPP (Operation not supported) Fixes: f8a226e ("net/mlx5: fix sysfs port name translation") Cc: [email protected] Signed-off-by: David Marchand <[email protected]> Acked-by: Viacheslav Ovsiienko <[email protected]>
1 parent 3a6c502 commit 1296e8d

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

drivers/net/mlx5/linux/mlx5_ethdev_os.c

+1
Original file line numberDiff line numberDiff line change
@@ -1083,6 +1083,7 @@ mlx5_sysfs_switch_info(unsigned int ifindex, struct mlx5_switch_info *info)
10831083

10841084
line_size = getline(&port_name, &port_name_size, file);
10851085
if (line_size < 0) {
1086+
free(port_name);
10861087
fclose(file);
10871088
rte_errno = errno;
10881089
return -rte_errno;

0 commit comments

Comments
 (0)