66 lines
2.4 KiB
Diff
66 lines
2.4 KiB
Diff
From f83a1996e3438e471cec086d53fb94be0c8666aa Mon Sep 17 00:00:00 2001
|
|
From: Viktor Ashirov <vashirov@redhat.com>
|
|
Date: Mon, 7 Jul 2025 23:11:17 +0200
|
|
Subject: [PATCH] Issue 6850 - AddressSanitizer: memory leak in mdb_init
|
|
|
|
Bug Description:
|
|
`dbmdb_componentid` can be allocated multiple times. To avoid a memory
|
|
leak, allocate it only once, and free at the cleanup.
|
|
|
|
Fixes: https://github.com/389ds/389-ds-base/issues/6850
|
|
|
|
Reviewed by: @mreynolds389, @tbordaz (Tnanks!)
|
|
---
|
|
ldap/servers/slapd/back-ldbm/db-mdb/mdb_config.c | 4 +++-
|
|
ldap/servers/slapd/back-ldbm/db-mdb/mdb_layer.c | 2 +-
|
|
ldap/servers/slapd/back-ldbm/db-mdb/mdb_misc.c | 5 +++++
|
|
3 files changed, 9 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_config.c b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_config.c
|
|
index 1f7b71442..bebc83b76 100644
|
|
--- a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_config.c
|
|
+++ b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_config.c
|
|
@@ -146,7 +146,9 @@ dbmdb_compute_limits(struct ldbminfo *li)
|
|
int mdb_init(struct ldbminfo *li, config_info *config_array)
|
|
{
|
|
dbmdb_ctx_t *conf = (dbmdb_ctx_t *)slapi_ch_calloc(1, sizeof(dbmdb_ctx_t));
|
|
- dbmdb_componentid = generate_componentid(NULL, "db-mdb");
|
|
+ if (dbmdb_componentid == NULL) {
|
|
+ dbmdb_componentid = generate_componentid(NULL, "db-mdb");
|
|
+ }
|
|
|
|
li->li_dblayer_config = conf;
|
|
strncpy(conf->home, li->li_directory, MAXPATHLEN-1);
|
|
diff --git a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_layer.c b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_layer.c
|
|
index 3ecc47170..c6e9f8b01 100644
|
|
--- a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_layer.c
|
|
+++ b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_layer.c
|
|
@@ -19,7 +19,7 @@
|
|
#include <prclist.h>
|
|
#include <glob.h>
|
|
|
|
-Slapi_ComponentId *dbmdb_componentid;
|
|
+Slapi_ComponentId *dbmdb_componentid = NULL;
|
|
|
|
#define BULKOP_MAX_RECORDS 100 /* Max records handled by a single bulk operations */
|
|
|
|
diff --git a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_misc.c b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_misc.c
|
|
index 2d07db9b5..ae10ac7cf 100644
|
|
--- a/ldap/servers/slapd/back-ldbm/db-mdb/mdb_misc.c
|
|
+++ b/ldap/servers/slapd/back-ldbm/db-mdb/mdb_misc.c
|
|
@@ -49,6 +49,11 @@ dbmdb_cleanup(struct ldbminfo *li)
|
|
}
|
|
slapi_ch_free((void **)&(li->li_dblayer_config));
|
|
|
|
+ if (dbmdb_componentid != NULL) {
|
|
+ release_componentid(dbmdb_componentid);
|
|
+ dbmdb_componentid = NULL;
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.49.0
|
|
|