mirror of
https://github.com/SELinuxProject/selinux
synced 2024-12-23 14:32:08 +00:00
libsepol/cil: Fix syntax checking of defaultrange rule
When "glblub" was added as a default for the defaultrange rule, the syntax array was updated because the "glblub" default does not need to specify a range of "low", "high", or "low-high". Unfortunately, additional checking was not added for the "source" and "target" defaults to make sure they specified a range. This means that using the "source" or "target" defaults without specifying the range will result in a segfault. When the "source" or "target" defaults are used, check that the rule specifies a range as well. This bug was found by the secilc-fuzzer. Signed-off-by: James Carter <jwcart2@gmail.com> Acked-by: Nicolas Iooss <nicolas.iooss@m4x.org>
This commit is contained in:
parent
c28525a26f
commit
ac8b35d910
@ -5886,6 +5886,11 @@ int cil_gen_defaultrange(struct cil_tree_node *parse_current, struct cil_tree_no
|
||||
|
||||
object = parse_current->next->next->data;
|
||||
if (object == CIL_KEY_SOURCE) {
|
||||
if (!parse_current->next->next->next) {
|
||||
cil_log(CIL_ERR, "Missing 'low', 'high', or 'low-high'\n");
|
||||
rc = SEPOL_ERR;
|
||||
goto exit;
|
||||
}
|
||||
range = parse_current->next->next->next->data;
|
||||
if (range == CIL_KEY_LOW) {
|
||||
def->object_range = CIL_DEFAULT_SOURCE_LOW;
|
||||
@ -5899,6 +5904,11 @@ int cil_gen_defaultrange(struct cil_tree_node *parse_current, struct cil_tree_no
|
||||
goto exit;
|
||||
}
|
||||
} else if (object == CIL_KEY_TARGET) {
|
||||
if (!parse_current->next->next->next) {
|
||||
cil_log(CIL_ERR, "Missing 'low', 'high', or 'low-high'\n");
|
||||
rc = SEPOL_ERR;
|
||||
goto exit;
|
||||
}
|
||||
range = parse_current->next->next->next->data;
|
||||
if (range == CIL_KEY_LOW) {
|
||||
def->object_range = CIL_DEFAULT_TARGET_LOW;
|
||||
|
Loading…
Reference in New Issue
Block a user