diff options
author | Wenchao Hao <haowenchao@huawei.com> | 2020-12-16 19:48:37 +0800 |
---|---|---|
committer | Wenchao Hao <haowenchao@huawei.com> | 2020-12-29 20:43:01 +0800 |
commit | e73749f34fdbf6862f43939fb958fca0ba4caadb (patch) | |
tree | 391434100e37a47b9c0f463ac1e5e29186eb8173 /libopeniscsiusr | |
parent | 66961454632ce954b902b8a41b48c453b656973a (diff) | |
download | open-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.c | 2 |
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); |