11 Star 0 Fork 18

src-openEuler/libsemanage

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
backport-libsemanage-free-resources-on-failed-connect-attempt.patch 3.19 KB
一键复制 编辑 原始数据 按行查看 历史
hugel 提交于 2025-03-17 14:27 +08:00 . backport patches from upstream
From e6d03452223c2404b9cfd04855ac8fca556e409d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= <cgzones@googlemail.com>
Date: Mon, 11 Nov 2024 15:16:32 +0100
Subject: [PATCH] libsemanage: free resources on failed connect attempt
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
In case connecting to the semanage database fails, free all already
allocated resources.
Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
Acked-by: James Carter <jwcart2@gmail.com>
Conflict:NA
Reference:https://github.com/SELinuxProject/selinux/commit/e6d03452223c2404b9cfd04855ac8fca556e409d
---
src/database_activedb.c | 3 +++
src/database_file.c | 3 +++
src/database_join.c | 3 +++
src/database_policydb.c | 2 +-
src/direct_api.c | 1 +
src/handle.c | 5 ++---
6 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/database_activedb.c b/src/database_activedb.c
index fa6b6105..e0369963 100644
--- a/src/database_activedb.c
+++ b/src/database_activedb.c
@@ -139,6 +139,9 @@ int dbase_activedb_init(semanage_handle_t * handle,
void dbase_activedb_release(dbase_activedb_t * dbase)
{
+ if (!dbase)
+ return;
+
dbase_llist_drop_cache(&dbase->llist);
free(dbase);
}
diff --git a/src/database_file.c b/src/database_file.c
index a7773fb5..09b32f8f 100644
--- a/src/database_file.c
+++ b/src/database_file.c
@@ -191,6 +191,9 @@ int dbase_file_init(semanage_handle_t * handle,
void dbase_file_release(dbase_file_t * dbase)
{
+ if (!dbase)
+ return;
+
dbase_llist_drop_cache(&dbase->llist);
free(dbase);
}
diff --git a/src/database_join.c b/src/database_join.c
index 2a2008e8..bf260952 100644
--- a/src/database_join.c
+++ b/src/database_join.c
@@ -271,6 +271,9 @@ int dbase_join_init(semanage_handle_t * handle,
void dbase_join_release(dbase_join_t * dbase)
{
+ if (!dbase)
+ return;
+
dbase_llist_drop_cache(&dbase->llist);
free(dbase);
}
diff --git a/src/database_policydb.c b/src/database_policydb.c
index 95418365..54b82958 100644
--- a/src/database_policydb.c
+++ b/src/database_policydb.c
@@ -44,7 +44,7 @@ struct dbase_policydb {
static void dbase_policydb_drop_cache(dbase_policydb_t * dbase)
{
- if (dbase->cache_serial >= 0) {
+ if (dbase && dbase->cache_serial >= 0) {
sepol_policydb_free(dbase->policydb);
dbase->cache_serial = -1;
dbase->modified = 0;
diff --git a/src/direct_api.c b/src/direct_api.c
index 8f8dc0da..ed4343dc 100644
--- a/src/direct_api.c
+++ b/src/direct_api.c
@@ -321,6 +321,7 @@ int semanage_direct_connect(semanage_handle_t * sh)
err:
ERR(sh, "could not establish direct connection");
+ (void) semanage_direct_disconnect(sh);
return STATUS_ERR;
}
diff --git a/src/handle.c b/src/handle.c
index f048f6d7..9bb84546 100644
--- a/src/handle.c
+++ b/src/handle.c
@@ -361,12 +361,11 @@ int semanage_access_check(semanage_handle_t * sh)
int semanage_disconnect(semanage_handle_t * sh)
{
- assert(sh != NULL && sh->funcs != NULL
- && sh->funcs->disconnect != NULL);
+ assert(sh != NULL);
if (!sh->is_connected) {
return 0;
}
- if (sh->funcs->disconnect(sh) < 0) {
+ if (sh->funcs && sh->funcs->disconnect(sh) < 0) {
return -1;
}
sh->is_in_transaction = 0;
--
2.33.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/libsemanage.git
git@gitee.com:src-openeuler/libsemanage.git
src-openeuler
libsemanage
libsemanage
master

搜索帮助