From f3f424e273ed966e88f7180601a712af80cac6bd Mon Sep 17 00:00:00 2001 From: Russ Allbery Date: Fri, 25 Sep 2009 17:50:54 -0700 Subject: [PATCH] h_GetHost_r cleanup cases avoid potentially leaking a cb_in or a capabilities blob; use a common exit function and free when these were left set. Reviewed-on: http://gerrit.openafs.org/496 Tested-by: Alistair Ferguson Reviewed-by: Alistair Ferguson Reviewed-by: Jeffrey Altman (cherry picked from commit 5d765426e597c60228e66bddaa21bf2453c74a85) Reviewed-on: http://gerrit.openafs.org/497 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/viced/host.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/viced/host.c b/src/viced/host.c index 1b6366b10..34cef0f52 100644 --- a/src/viced/host.c +++ b/src/viced/host.c @@ -1447,7 +1447,8 @@ h_GetHost_r(struct rx_connection *tcon) h_threadquota(host->lock.num_waiting)) { if (!held) h_Release_r(host); - return 0; + host = NULL; + goto gethost_out; } h_Lock_r(host); if (!(host->hostFlags & ALTADDR)) { @@ -1655,7 +1656,8 @@ h_GetHost_r(struct rx_connection *tcon) h_Release_r(host); host = NULL; rx_DestroyConnection(cb_in); - return 0; + cb_in = NULL; + goto gethost_out; } else { ViceLog(0, ("CB: WhoAreYou failed for host %x (%s:%d), error %d\n", @@ -1936,10 +1938,16 @@ h_GetHost_r(struct rx_connection *tcon) host->hostFlags &= ~HWHO_INPROGRESS; h_Unlock_r(host); } + + gethost_out: if (caps.Capabilities_val) free(caps.Capabilities_val); caps.Capabilities_val = NULL; caps.Capabilities_len = 0; + if (cb_in) { + rx_DestroyConnection(cb_in); + cb_in = NULL; + } return host; } /*h_GetHost_r */ -- 2.39.5