From 4dc23b01eef1df363701f2cabe54421472f141ef Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Sun, 3 May 2009 23:56:08 +0000
Subject: [PATCH] ITS#6074 initial patch (still not complete)

---
 CHANGES                        | 1 +
 servers/slapd/back-bdb/cache.c | 7 +++++++
 2 files changed, 8 insertions(+)

diff --git a/CHANGES b/CHANGES
index afe35295fb..8be3b2efb7 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,7 @@ OpenLDAP 2.4.17 Engineering
 	Fixed slapd normalization of updated schema attributes (ITS#5540)
 	Fixed slapd pagedresults stacked control with overlays (ITS#6056)
 	Fixed slapd sockets usage on windows (ITS#6039)
+	Fixed slapd-bdb freeing of already freed entries (ITS#6074)
 	Added slapo-rwm rwm-drop-unrequested-attrs config option (ITS#6057)
 	Fixed slapo-rwm dn passing (ITS#6070)
 	Fixed slapo-rwm entry free (ITS#6058)
diff --git a/servers/slapd/back-bdb/cache.c b/servers/slapd/back-bdb/cache.c
index e54408d659..02f5554e22 100644
--- a/servers/slapd/back-bdb/cache.c
+++ b/servers/slapd/back-bdb/cache.c
@@ -1345,6 +1345,9 @@ bdb_cache_delete_cleanup(
 {
 	/* Enter with ei locked */
 
+	/* already freed? */
+	if ( !ei->bei_parent ) return;
+
 	if ( ei->bei_e ) {
 		ei->bei_e->e_private = NULL;
 #ifdef SLAP_ZONE_ALLOC
@@ -1368,6 +1371,10 @@ bdb_cache_delete_internal(
 	int rc = 0;	/* return code */
 	int decr_leaf = 0;
 
+	/* already freed? */
+	if ( !e->bei_parent )
+		return -1;
+
 	/* Lock the parent's kids tree */
 	bdb_cache_entryinfo_lock( e->bei_parent );
 
-- 
GitLab