libsepol/libsepol-rhat.patch

49 lines
1.6 KiB
Diff
Raw Normal View History

diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c
index b1af365..42bc931 100644
--- a/libsepol/src/expand.c
+++ b/libsepol/src/expand.c
@@ -1181,23 +1181,26 @@ static int copy_role_trans(expand_state_t * state, role_trans_rule_t * rules)
cur_trans = state->out->role_tr;
while (cur_trans) {
+ unsigned int mapped_role;
+
+ mapped_role = state->rolemap[cur->new_role - 1];
+
if ((cur_trans->role ==
i + 1) &&
(cur_trans->type ==
j + 1) &&
(cur_trans->tclass ==
k + 1)) {
- if (cur_trans->
- new_role ==
- cur->new_role) {
+ if (cur_trans->new_role == mapped_role) {
break;
} else {
ERR(state->handle,
- "Conflicting role trans rule %s %s : %s %s",
+ "Conflicting role trans rule %s %s : %s { %s vs %s }",
state->out->p_role_val_to_name[i],
state->out->p_type_val_to_name[j],
state->out->p_class_val_to_name[k],
- state->out->p_role_val_to_name[cur->new_role - 1]);
+ state->out->p_role_val_to_name[mapped_role],
+ state->out->p_role_val_to_name[cur_trans->new_role - 1]);
return -1;
}
}
diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index 6d8ff91..3d8dc80 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -2280,6 +2280,7 @@ int filename_trans_read(filename_trans_t **t, struct policy_file *fp)
lft->next = ft;
else
*t = ft;
+ lft = ft;
rc = next_entry(buf, fp, sizeof(uint32_t));
if (rc < 0)
return -1;