mirror of
https://github.com/SELinuxProject/selinux
synced 2025-01-21 12:53:03 +00:00
libsepol/cil: be more robust when encountering <src_info>
OSS-Fuzz found a Null-dereference READ in the CIL compiler when trying to compile the following policy: (<src_info>) In cil_gen_src_info(), parse_current->next is NULL even though the code expects that both parse_current->next and parse_current->next->next exists. Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28457 Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
This commit is contained in:
parent
6b56105858
commit
4662bdc11c
@ -6070,6 +6070,11 @@ int cil_gen_src_info(struct cil_tree_node *parse_current, struct cil_tree_node *
|
||||
/* No need to check syntax, because this is auto generated */
|
||||
struct cil_src_info *info = NULL;
|
||||
|
||||
if (parse_current->next == NULL || parse_current->next->next == NULL) {
|
||||
cil_tree_log(parse_current, CIL_ERR, "Bad <src_info>");
|
||||
return SEPOL_ERR;
|
||||
}
|
||||
|
||||
cil_src_info_init(&info);
|
||||
|
||||
info->is_cil = (parse_current->next->data == CIL_KEY_SRC_CIL) ? CIL_TRUE : CIL_FALSE;
|
||||
|
@ -69,7 +69,7 @@ struct cil_tree_node *cil_tree_get_next_path(struct cil_tree_node *node, char **
|
||||
|
||||
while (node) {
|
||||
if (node->flavor == CIL_NODE && node->data == NULL) {
|
||||
if (node->cl_head->data == CIL_KEY_SRC_INFO) {
|
||||
if (node->cl_head->data == CIL_KEY_SRC_INFO && node->cl_head->next != NULL && node->cl_head->next->next != NULL) {
|
||||
/* Parse Tree */
|
||||
*path = node->cl_head->next->next->data;
|
||||
*is_cil = (node->cl_head->next->data == CIL_KEY_SRC_CIL);
|
||||
|
Loading…
Reference in New Issue
Block a user