From f83a1996e3438e471cec086d53fb94be0c8666aa Mon Sep 17 00:00:00 2001 From: Viktor Ashirov 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 #include -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