mirror of
https://github.com/SELinuxProject/selinux
synced 2025-04-01 00:30:41 +00:00
libsepol/cil: Push line mark state first when processing a line mark
CIL line mark rules are used to annotate the original line and file of a rule. It is mostly used for neverallow rules that have been converted to CIL. Pushing the current line mark state after processing a line mark section does not make sense since that information is never used. When the line mark section ends the information is just popped and discarded. It also makes pop_hll_info() more complicated than it needs to be. Push the line mark state first and simplfy pop_hll_info(). Signed-off-by: James Carter <jwcart2@gmail.com>
This commit is contained in:
parent
4388801685
commit
0f12ee87ac
@ -66,19 +66,15 @@ static void push_hll_info(struct cil_stack *stack, uint32_t hll_lineno, uint32_t
|
||||
static void pop_hll_info(struct cil_stack *stack, uint32_t *hll_lineno, uint32_t *hll_expand)
|
||||
{
|
||||
struct cil_stack_item *curr = cil_stack_pop(stack);
|
||||
struct cil_stack_item *prev = cil_stack_peek(stack);
|
||||
struct hll_info *old;
|
||||
struct hll_info *info;
|
||||
|
||||
free(curr->data);
|
||||
|
||||
if (!prev) {
|
||||
*hll_lineno = 0;
|
||||
*hll_expand = 0;
|
||||
} else {
|
||||
old = prev->data;
|
||||
*hll_lineno = old->hll_lineno;
|
||||
*hll_expand = old->hll_expand;
|
||||
if (!curr) {
|
||||
return;
|
||||
}
|
||||
info = curr->data;
|
||||
*hll_expand = info->hll_expand;
|
||||
*hll_lineno = info->hll_lineno;
|
||||
free(curr->data);
|
||||
}
|
||||
|
||||
static void create_node(struct cil_tree_node **node, struct cil_tree_node *current, uint32_t line, uint32_t hll_line, void *value)
|
||||
@ -128,6 +124,8 @@ static int add_hll_linemark(struct cil_tree_node **current, uint32_t *hll_lineno
|
||||
pop_hll_info(stack, hll_lineno, hll_expand);
|
||||
*current = (*current)->parent;
|
||||
} else {
|
||||
push_hll_info(stack, *hll_lineno, *hll_expand);
|
||||
|
||||
create_node(&node, *current, tok.line, *hll_lineno, NULL);
|
||||
insert_node(node, *current);
|
||||
*current = node;
|
||||
@ -158,8 +156,6 @@ static int add_hll_linemark(struct cil_tree_node **current, uint32_t *hll_lineno
|
||||
*hll_lineno = val;
|
||||
*hll_expand = (hll_type == CIL_KEY_HLL_LMX) ? 1 : 0;
|
||||
|
||||
push_hll_info(stack, *hll_lineno, *hll_expand);
|
||||
|
||||
cil_lexer_next(&tok);
|
||||
if (tok.type != SYMBOL && tok.type != QSTRING) {
|
||||
cil_log(CIL_ERR, "Invalid line mark syntax\n");
|
||||
|
Loading…
Reference in New Issue
Block a user