Skip to content

Commit

Permalink
checkpolicy: cleanup identifiers on error
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
  • Loading branch information
cgzones committed Oct 1, 2021
1 parent 115dd1d commit 34ec291
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions checkpolicy/policy_define.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,7 @@ static int read_classes(ebitmap_t *e_classes)
while ((id = queue_remove(id_queue))) {
if (!is_id_in_scope(SYM_CLASSES, id)) {
yyerror2("class %s is not within scope", id);
free(id);
return -1;
}
cladatum = hashtab_search(policydbp->p_classes.table, id);
Expand Down Expand Up @@ -380,15 +381,18 @@ int define_default_user(int which)
while ((id = queue_remove(id_queue))) {
if (!is_id_in_scope(SYM_CLASSES, id)) {
yyerror2("class %s is not within scope", id);
free(id);
return -1;
}
cladatum = hashtab_search(policydbp->p_classes.table, id);
if (!cladatum) {
yyerror2("unknown class %s", id);
free(id);
return -1;
}
if (cladatum->default_user && cladatum->default_user != which) {
yyerror2("conflicting default user information for class %s", id);
free(id);
return -1;
}
cladatum->default_user = which;
Expand All @@ -412,15 +416,18 @@ int define_default_role(int which)
while ((id = queue_remove(id_queue))) {
if (!is_id_in_scope(SYM_CLASSES, id)) {
yyerror2("class %s is not within scope", id);
free(id);
return -1;
}
cladatum = hashtab_search(policydbp->p_classes.table, id);
if (!cladatum) {
yyerror2("unknown class %s", id);
free(id);
return -1;
}
if (cladatum->default_role && cladatum->default_role != which) {
yyerror2("conflicting default role information for class %s", id);
free(id);
return -1;
}
cladatum->default_role = which;
Expand All @@ -444,15 +451,18 @@ int define_default_type(int which)
while ((id = queue_remove(id_queue))) {
if (!is_id_in_scope(SYM_CLASSES, id)) {
yyerror2("class %s is not within scope", id);
free(id);
return -1;
}
cladatum = hashtab_search(policydbp->p_classes.table, id);
if (!cladatum) {
yyerror2("unknown class %s", id);
free(id);
return -1;
}
if (cladatum->default_type && cladatum->default_type != which) {
yyerror2("conflicting default type information for class %s", id);
free(id);
return -1;
}
cladatum->default_type = which;
Expand All @@ -476,15 +486,18 @@ int define_default_range(int which)
while ((id = queue_remove(id_queue))) {
if (!is_id_in_scope(SYM_CLASSES, id)) {
yyerror2("class %s is not within scope", id);
free(id);
return -1;
}
cladatum = hashtab_search(policydbp->p_classes.table, id);
if (!cladatum) {
yyerror2("unknown class %s", id);
free(id);
return -1;
}
if (cladatum->default_range && cladatum->default_range != which) {
yyerror2("conflicting default range information for class %s", id);
free(id);
return -1;
}
cladatum->default_range = which;
Expand Down Expand Up @@ -515,6 +528,7 @@ int define_common_perms(void)
comdatum = hashtab_search(policydbp->p_commons.table, id);
if (comdatum) {
yyerror2("duplicate declaration for common %s\n", id);
free(id);
return -1;
}
comdatum = (common_datum_t *) malloc(sizeof(common_datum_t));
Expand Down Expand Up @@ -1233,9 +1247,9 @@ static int add_aliases_to_type(type_datum_t * type)
int ret;
while ((id = queue_remove(id_queue))) {
if (id_has_dot(id)) {
yyerror2
("type alias identifier %s may not contain periods", id);
free(id);
yyerror
("type alias identifiers may not contain periods");
return -1;
}
aliasdatum = (type_datum_t *) malloc(sizeof(type_datum_t));
Expand Down Expand Up @@ -1756,8 +1770,8 @@ int define_bool_tunable(int is_tunable)
return -1;
}
if (id_has_dot(id)) {
yyerror2("boolean identifier %s may not contain periods", id);
free(id);
yyerror("boolean identifiers may not contain periods");
return -1;
}
datum = (cond_bool_datum_t *) malloc(sizeof(cond_bool_datum_t));
Expand Down

0 comments on commit 34ec291

Please sign in to comment.