libsepol/backport-libsepol-cil-Optionally-allow-duplicate-role-declaration.patch

41 lines
1.3 KiB
Diff
Raw Permalink Normal View History

From ae3c44c2d44b5e2f1c87b4b095d522a7f11add7a Mon Sep 17 00:00:00 2001
From: James Carter <jwcart2@gmail.com>
Date: Mon, 21 Apr 2025 11:34:35 +0800
Subject: [PATCH] libsepol-cil-Optionally-allow-duplicate-role-declarations
Reference:https://github.com/SELinuxProject/selinux/commit/7492632a6b6a1081d0c057a2ecfc193be9989515
---
libsepol/cil/src/cil_build_ast.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c
index 4177c9f..8264984 100644
--- a/libsepol/cil/src/cil_build_ast.c
+++ b/libsepol/cil/src/cil_build_ast.c
@@ -92,6 +92,7 @@ static int cil_allow_multiple_decls(struct cil_db *db, enum cil_flavor f_new, en
switch (f_new) {
case CIL_TYPE:
case CIL_TYPEATTRIBUTE:
+ case CIL_ROLE:
if (db->multiple_decls) {
return CIL_TRUE;
}
@@ -1750,7 +1751,12 @@ int cil_gen_role(struct cil_db *db, struct cil_tree_node *parse_current, struct
rc = cil_gen_node(db, ast_node, (struct cil_symtab_datum*)role, (hashtab_key_t)key, CIL_SYM_ROLES, CIL_ROLE);
if (rc != SEPOL_OK) {
- goto exit;
+ if (rc == SEPOL_EEXIST) {
+ cil_destroy_role(role);
+ role = NULL;
+ } else {
+ goto exit;
+ }
}
return SEPOL_OK;
--
2.33.0