diff options
Diffstat (limited to 'security/selinux/ss/conditional.c')
| -rw-r--r-- | security/selinux/ss/conditional.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/security/selinux/ss/conditional.c b/security/selinux/ss/conditional.c index 655fe1c6cc6..377d148e715 100644 --- a/security/selinux/ss/conditional.c +++ b/security/selinux/ss/conditional.c @@ -175,10 +175,10 @@ void cond_policydb_destroy(struct policydb *p)  int cond_init_bool_indexes(struct policydb *p)  {  	kfree(p->bool_val_to_struct); -	p->bool_val_to_struct = (struct cond_bool_datum **) +	p->bool_val_to_struct =  		kmalloc(p->p_bools.nprim * sizeof(struct cond_bool_datum *), GFP_KERNEL);  	if (!p->bool_val_to_struct) -		return -1; +		return -ENOMEM;  	return 0;  } @@ -193,6 +193,7 @@ int cond_index_bool(void *key, void *datum, void *datap)  {  	struct policydb *p;  	struct cond_bool_datum *booldatum; +	struct flex_array *fa;  	booldatum = datum;  	p = datap; @@ -200,7 +201,10 @@ int cond_index_bool(void *key, void *datum, void *datap)  	if (!booldatum->value || booldatum->value > p->p_bools.nprim)  		return -EINVAL; -	p->p_bool_val_to_name[booldatum->value - 1] = key; +	fa = p->sym_val_to_name[SYM_BOOLS]; +	if (flex_array_put_ptr(fa, booldatum->value - 1, key, +			       GFP_KERNEL | __GFP_ZERO)) +		BUG();  	p->bool_val_to_struct[booldatum->value - 1] = booldatum;  	return 0; @@ -551,7 +555,7 @@ static int cond_write_av_list(struct policydb *p,  	return 0;  } -int cond_write_node(struct policydb *p, struct cond_node *node, +static int cond_write_node(struct policydb *p, struct cond_node *node,  		    struct policy_file *fp)  {  	struct cond_expr *cur_expr;  | 
