From e068d6add969bfe0a3ce5b1734d100e22e2644b5 Mon Sep 17 00:00:00 2001 From: slavash Date: Wed, 5 Dec 2018 13:28:17 +0000 Subject: [PATCH] libibverbs: Fix memory leak in ibv_read_sysfs_file(). Testing packetdrill using valgrind resulted in finding a memory leak in ibv_read_sysfs_file(). The attached patch fixes it. Submitted by: tuexen@ Approved by: hselasky (mentor) MFC after: 1 week Sponsored by: Mellanox Technologies --- contrib/ofed/libibverbs/sysfs.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/contrib/ofed/libibverbs/sysfs.c b/contrib/ofed/libibverbs/sysfs.c index 0ea19fc8fd85..99ccded3276d 100644 --- a/contrib/ofed/libibverbs/sysfs.c +++ b/contrib/ofed/libibverbs/sysfs.c @@ -79,7 +79,7 @@ int ibv_read_sysfs_file(const char *dir, const char *file, char *buf, size_t size) { char *path, *s; - int fd; + int ret; size_t len; if (asprintf(&path, "%s/%s", dir, file) < 0) @@ -89,12 +89,13 @@ int ibv_read_sysfs_file(const char *dir, const char *file, if (*s == '/') *s = '.'; - len = size; - if (sysctlbyname(&path[1], buf, &len, NULL, 0) == -1) - return -1; - + len = size; + ret = sysctlbyname(&path[1], buf, &len, NULL, 0); free(path); + if (ret == -1) + return -1; + if (len > 0 && buf[len - 1] == '\n') buf[--len] = '\0';