Commit 74915363 authored by Christian Göttsche's avatar Christian Göttsche Committed by Paul Moore
Browse files

selinux: avoid unnecessary indirection in struct level_datum



Store the owned member of type struct mls_level directly in the parent
struct instead of an extra heap allocation.

Signed-off-by: default avatarChristian Göttsche <cgzones@googlemail.com>
Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
parent f0758616
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -171,7 +171,7 @@ int mls_level_isvalid(struct policydb *p, struct mls_level *l)
	 * levdatum->level->cat and no bit in l->cat is larger than
	 * p->p_cats.nprim.
	 */
	return ebitmap_contains(&levdatum->level->cat, &l->cat,
	return ebitmap_contains(&levdatum->level.cat, &l->cat,
				p->p_cats.nprim);
}

@@ -289,7 +289,7 @@ int mls_context_to_sid(struct policydb *pol, char oldc, char *scontext,
		levdatum = symtab_search(&pol->p_levels, sensitivity);
		if (!levdatum)
			return -EINVAL;
		context->range.level[l].sens = levdatum->level->sens;
		context->range.level[l].sens = levdatum->level.sens;

		/* Extract category set. */
		while (next_cat != NULL) {
@@ -456,7 +456,7 @@ int mls_convert_context(struct policydb *oldp, struct policydb *newp,

		if (!levdatum)
			return -EINVAL;
		newc->range.level[l].sens = levdatum->level->sens;
		newc->range.level[l].sens = levdatum->level.sens;

		ebitmap_for_each_positive_bit(&oldc->range.level[l].cat, node,
					      i)
+6 −13
Original line number Diff line number Diff line
@@ -301,9 +301,7 @@ static int sens_destroy(void *key, void *datum, void *p)
	kfree(key);
	if (datum) {
		levdatum = datum;
		if (levdatum->level)
			ebitmap_destroy(&levdatum->level->cat);
		kfree(levdatum->level);
		ebitmap_destroy(&levdatum->level.cat);
	}
	kfree(datum);
	return 0;
@@ -635,11 +633,11 @@ static int sens_index(void *key, void *datum, void *datap)
	p = datap;

	if (!levdatum->isalias) {
		if (!levdatum->level->sens ||
		    levdatum->level->sens > p->p_levels.nprim)
		if (!levdatum->level.sens ||
		    levdatum->level.sens > p->p_levels.nprim)
			return -EINVAL;

		p->sym_val_to_name[SYM_LEVELS][levdatum->level->sens - 1] = key;
		p->sym_val_to_name[SYM_LEVELS][levdatum->level.sens - 1] = key;
	}

	return 0;
@@ -1618,12 +1616,7 @@ static int sens_read(struct policydb *p, struct symtab *s, struct policy_file *f
	if (rc)
		goto bad;

	rc = -ENOMEM;
	levdatum->level = kmalloc(sizeof(*levdatum->level), GFP_KERNEL);
	if (!levdatum->level)
		goto bad;

	rc = mls_read_level(levdatum->level, fp);
	rc = mls_read_level(&levdatum->level, fp);
	if (rc)
		goto bad;

@@ -2844,7 +2837,7 @@ static int sens_write(void *vkey, void *datum, void *ptr)
	if (rc)
		return rc;

	rc = mls_write_level(levdatum->level, fp);
	rc = mls_write_level(&levdatum->level, fp);
	if (rc)
		return rc;

+1 −1
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ struct user_datum {

/* Sensitivity attributes */
struct level_datum {
	struct mls_level *level; /* sensitivity and associated categories */
	struct mls_level level; /* sensitivity and associated categories */
	unsigned char isalias; /* is this sensitivity an alias for another? */
};