diff mbox series

[2/2] rpcb_clnt.c: Eliminate double frees in delete_cache()

Message ID 20230801144209.557175-2-steved@redhat.com (mailing list archive)
State New, archived
Headers show
Series [1/2] rpcb_clnt.c: memory leak in destroy_addr | expand

Commit Message

Steve Dickson Aug. 1, 2023, 2:42 p.m. UTC
From: Herb Wartens <wartens2@llnl.gov>

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2224666
Signed-off-by: Steve Dickson <steved@redhat.com>
---
 src/rpcb_clnt.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Steve Dickson Aug. 7, 2023, 11:16 a.m. UTC | #1
On 8/1/23 10:42 AM, Steve Dickson wrote:
> From: Herb Wartens <wartens2@llnl.gov>
> 
> Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2224666
> Signed-off-by: Steve Dickson <steved@redhat.com>
Committed... (tag: libtirpc-1-3-4-rc2)

steved
> ---
>   src/rpcb_clnt.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
> index c0a9e12..68fe69a 100644
> --- a/src/rpcb_clnt.c
> +++ b/src/rpcb_clnt.c
> @@ -262,12 +262,15 @@ delete_cache(addr)
>   	for (cptr = front; cptr != NULL; cptr = cptr->ac_next) {
>   		if (!memcmp(cptr->ac_taddr->buf, addr->buf, addr->len)) {
>   			/* Unlink from cache. We'll destroy it after releasing the mutex. */
> -			if (cptr->ac_uaddr)
> +			if (cptr->ac_uaddr) {
>   				free(cptr->ac_uaddr);
> -			if (prevptr)
> +				cptr->ac_uaddr = NULL;
> +			}
> +			if (prevptr) {
>   				prevptr->ac_next = cptr->ac_next;
> -			else
> +			} else {
>   				front = cptr->ac_next;
> +			}
>   			cachesize--;
>   			break;
>   		}
diff mbox series

Patch

diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
index c0a9e12..68fe69a 100644
--- a/src/rpcb_clnt.c
+++ b/src/rpcb_clnt.c
@@ -262,12 +262,15 @@  delete_cache(addr)
 	for (cptr = front; cptr != NULL; cptr = cptr->ac_next) {
 		if (!memcmp(cptr->ac_taddr->buf, addr->buf, addr->len)) {
 			/* Unlink from cache. We'll destroy it after releasing the mutex. */
-			if (cptr->ac_uaddr)
+			if (cptr->ac_uaddr) {
 				free(cptr->ac_uaddr);
-			if (prevptr)
+				cptr->ac_uaddr = NULL;
+			}
+			if (prevptr) {
 				prevptr->ac_next = cptr->ac_next;
-			else
+			} else {
 				front = cptr->ac_next;
+			}
 			cachesize--;
 			break;
 		}