From: Todd C. Miller Date: Thu, 14 Mar 2019 17:31:05 +0000 (-0600) Subject: Plug a memory leak on user/group lookup failure found by ASAN. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=194968eaf0ef6fd3d2a7c3eb6a78166074fe25ec;p=sudo Plug a memory leak on user/group lookup failure found by ASAN. --- diff --git a/plugins/sudoers/pwutil.c b/plugins/sudoers/pwutil.c index ab60986b1..963d0713e 100644 --- a/plugins/sudoers/pwutil.c +++ b/plugins/sudoers/pwutil.c @@ -249,7 +249,8 @@ done: item->d.pw ? item->d.pw->pw_name : "unknown", item->registry, node ? "cache hit" : "cached"); } - item->refcnt++; + if (item->d.pw != NULL) + item->refcnt++; debug_return_ptr(item->d.pw); } @@ -319,7 +320,8 @@ done: key.registry, item->d.pw ? (int)item->d.pw->pw_uid : -1, item->registry, node ? "cache hit" : "cached"); } - item->refcnt++; + if (item->d.pw != NULL) + item->refcnt++; debug_return_ptr(item->d.pw); } @@ -630,7 +632,8 @@ done: key.registry, item->d.gr ? (int)item->d.gr->gr_gid : -1, item->registry, node ? "cache hit" : "cached"); } - item->refcnt++; + if (item->d.gr != NULL) + item->refcnt++; debug_return_ptr(item->d.gr); } @@ -713,7 +716,8 @@ sudo_fakegrnam(const char *group) break; } } - item->refcnt++; + if (item->d.gr != NULL) + item->refcnt++; debug_return_ptr(item->d.gr); } @@ -854,7 +858,8 @@ sudo_get_grlist(const struct passwd *pw) } } done: - item->refcnt++; + if (item->d.grlist != NULL) + item->refcnt++; debug_return_ptr(item->d.grlist); } @@ -957,7 +962,8 @@ sudo_get_gidlist(const struct passwd *pw, unsigned int type) } } done: - item->refcnt++; + if (item->d.gidlist != NULL) + item->refcnt++; debug_return_ptr(item->d.gidlist); }