[31594] in CVS-changelog-for-Kerberos-V5

home help back first fref pref prev next nref lref last post

krb5 commit: Fix memory leak in mpool_get() error paths

daemon@ATHENA.MIT.EDU (ghudson@mit.edu)
Fri Oct 30 18:50:16 2026

From: ghudson@mit.edu
To: cvs-krb5@mit.edu
Message-Id: <20261030225010.A758D1057E3@krbdev.mit.edu>
Date: Fri, 30 Oct 2026 18:50:10 -0400 (EDT)
MIME-Version: 1.0
Reply-To: krbdev@mit.edu
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: cvs-krb5-bounces@mit.edu

https://github.com/krb5/krb5/commit/8f4c88a8b1bdb007f3d84f1280e7edf89a575ca4
commit 8f4c88a8b1bdb007f3d84f1280e7edf89a575ca4
Author: Tigran Sogomonian <tsogomonian@astralinux.ru>
Date:   Thu Oct 15 12:47:53 2026 +0300

    Fix memory leak in mpool_get() error paths
    
    If mpool_get() fails after obtaining a bucket from mpool_bkt() (offset
    overflow, lseek failure, or partial read), the bucket is not on any
    queue and is leaked.  Free it and decrement curcache on these paths.
    
    [ghudson@mit.edu: added cautionary comment to err label]
    
    ticket: 9273 (new)
    tags: pullup
    target_version: 1.22-next

 src/plugins/kdb/db2/libdb2/mpool/mpool.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/plugins/kdb/db2/libdb2/mpool/mpool.c b/src/plugins/kdb/db2/libdb2/mpool/mpool.c
index 028fb180c..0182b8cf9 100644
--- a/src/plugins/kdb/db2/libdb2/mpool/mpool.c
+++ b/src/plugins/kdb/db2/libdb2/mpool/mpool.c
@@ -218,17 +218,17 @@ mpool_get(MPOOL *mp, db_pgno_t pgno, u_int flags)
 	    /* Run past the end of the file, or at least the part we
 	       can address without large-file support?  */
 	    errno = E2BIG;
-	    return NULL;
+	    goto err;
 	}
 	if (lseek(mp->fd, off, SEEK_SET) != off)
-		return (NULL);
+		goto err;
 
 	if ((nr = read(mp->fd, bp->page, mp->pagesize)) !=
 	    (ssize_t)mp->pagesize) {
 		if (nr > 0) {
 			/* A partial read is definitely bad. */
 			errno = EINVAL;
-			return (NULL);
+			goto err;
 		} else {
 			/*
 			 * A zero-length reads, means you need to create a
@@ -257,6 +257,13 @@ mpool_get(MPOOL *mp, db_pgno_t pgno, u_int flags)
 		(mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
 
 	return (bp->page);
+
+err:
+	/* Only use this label after the mpool_bkt() call.  mpool_bkt()
+	 * returned a fresh or unlinked page; drop it. */
+	free(bp);
+	mp->curcache--;
+	return (NULL);
 }
 
 /*
_______________________________________________
cvs-krb5 mailing list
cvs-krb5@mit.edu
https://mailman.mit.edu/mailman/listinfo/cvs-krb5

home help back first fref pref prev next nref lref last post