The PMD reads auxiliary network device name from the Linux SYSFS.

The current implementation closed directory context before it copied
a file name from that directory into internal buffer.

The patch closes SYSFS directory after file name was copied.

Fixes: 777b72a9339c ("common/mlx5: support auxiliary bus")
Cc: sta...@dpdk.org

Signed-off-by: Gregory Etelson <getel...@nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnow...@nvidia.com>
---
 drivers/common/mlx5/linux/mlx5_common_auxiliary.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/common/mlx5/linux/mlx5_common_auxiliary.c 
b/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
index b4ea604820..d2a7758285 100644
--- a/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
+++ b/drivers/common/mlx5/linux/mlx5_common_auxiliary.c
@@ -26,8 +26,8 @@ mlx5_auxiliary_get_child_name(const char *dev, const char 
*node,
 {
        DIR *dir;
        struct dirent *dent;
-       MKSTR(path, "%s/%s%s", AUXILIARY_SYSFS_PATH, dev, node);
 
+       MKSTR(path, "%s/%s%s", AUXILIARY_SYSFS_PATH, dev, node);
        dir = opendir(path);
        if (dir == NULL) {
                rte_errno = errno;
@@ -38,14 +38,17 @@ mlx5_auxiliary_get_child_name(const char *dev, const char 
*node,
                if (dent->d_name[0] != '.')
                        break;
        }
-       closedir(dir);
        if (dent == NULL) {
                rte_errno = ENOENT;
-               return -rte_errno;
+               goto end;
        }
        if (rte_strscpy(child, dent->d_name, size) < 0)
-               return -rte_errno;
-       return 0;
+               goto end;
+       rte_errno = 0;
+
+end:
+       closedir(dir);
+       return -rte_errno;
 }
 
 static int
-- 
2.48.1

Reply via email to