From: Danny Al-Gaaf Date: Wed, 12 Aug 2015 16:38:38 +0000 (+0200) Subject: client/Client.cc: fix realloc memory leak X-Git-Tag: v0.94.7~23^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=16e3e2f0a0dc465ed9079df051215f4758f0ee4d;p=ceph.git client/Client.cc: fix realloc memory leak Fix handling of realloc. If realloc() fails it returns NULL, assigning the return value of realloc() directly to the pointer without checking for the result will lead to a memory leak. Signed-off-by: Danny Al-Gaaf Signed-off-by: Yan, Zheng (cherry picked from commit 4f98dab99c35663de89a06e2dfdbd874f56aed41) --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 9862f9b8d142..43131f8d257e 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4419,11 +4419,13 @@ int Client::check_permissions(Inode *in, int flags, int uid, int gid) while (1) { if (getgrouplist(pw->pw_name, gid, sgids, &sgid_count) == -1) { // we need to resize the group list and try again - sgids = (gid_t*)realloc(sgids, sgid_count * sizeof(gid_t)); - if (sgids == NULL) { + void *_realloc = NULL; + if ((_realloc = realloc(sgids, sgid_count * sizeof(gid_t))) == NULL) { ldout(cct, 3) << "allocating group memory failed" << dendl; + free(sgids); return -EACCES; } + sgids = (gid_t*)_realloc; continue; } // list was successfully retrieved