summaryrefslogtreecommitdiff
path: root/libopeniscsiusr
diff options
context:
space:
mode:
authorWenchao Hao <haowenchao@huawei.com>2020-12-16 19:48:37 +0800
committerWenchao Hao <haowenchao@huawei.com>2020-12-29 20:43:01 +0800
commite73749f34fdbf6862f43939fb958fca0ba4caadb (patch)
tree391434100e37a47b9c0f463ac1e5e29186eb8173 /libopeniscsiusr
parent66961454632ce954b902b8a41b48c453b656973a (diff)
downloadopen-iscsi-e73749f34fdbf6862f43939fb958fca0ba4caadb.tar.gz
libopeniscsiusr: Fix memory leak in iscsi_sessions_get()
If _iscsi_sids_get() gets 0 session, *session_count is 0, while calloc(*session_count, ...) might return a valid pointer although *session_count is 0. The memory allocated by calloc() would be freed in iscsi_session_free() where did not perform free operation if session_count is zero. So memory leak would occur if _iscsi_sids_get() gets 0 session, this patch just goto out on if _iscsi_sids_get() gets 0 session to avoid calloc() being called. Signed-off-by: Wenchao Hao <haowenchao@huawei.com>
Diffstat (limited to 'libopeniscsiusr')
-rw-r--r--libopeniscsiusr/session.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/libopeniscsiusr/session.c b/libopeniscsiusr/session.c
index 98601dc..7ace4d6 100644
--- a/libopeniscsiusr/session.c
+++ b/libopeniscsiusr/session.c
@@ -256,6 +256,8 @@ int iscsi_sessions_get(struct iscsi_context *ctx,
*session_count = 0;
_good(_iscsi_sids_get(ctx, &sids, session_count), rc ,out);
+ if (!*session_count)
+ goto out;
*sessions = calloc (*session_count, sizeof(struct iscsi_session *));
_alloc_null_check(ctx, *sessions, rc, out);