Skip to content

Commit 7491536

Browse files
cgzonespcmoore
authored andcommitted
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: Christian Göttsche <cgzones@googlemail.com> Signed-off-by: Paul Moore <paul@paul-moore.com>
1 parent f075861 commit 7491536

File tree

3 files changed

+10
-17
lines changed

3 files changed

+10
-17
lines changed

security/selinux/ss/mls.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ int mls_level_isvalid(struct policydb *p, struct mls_level *l)
171171
* levdatum->level->cat and no bit in l->cat is larger than
172172
* p->p_cats.nprim.
173173
*/
174-
return ebitmap_contains(&levdatum->level->cat, &l->cat,
174+
return ebitmap_contains(&levdatum->level.cat, &l->cat,
175175
p->p_cats.nprim);
176176
}
177177

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

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

457457
if (!levdatum)
458458
return -EINVAL;
459-
newc->range.level[l].sens = levdatum->level->sens;
459+
newc->range.level[l].sens = levdatum->level.sens;
460460

461461
ebitmap_for_each_positive_bit(&oldc->range.level[l].cat, node,
462462
i)

security/selinux/ss/policydb.c

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,7 @@ static int sens_destroy(void *key, void *datum, void *p)
301301
kfree(key);
302302
if (datum) {
303303
levdatum = datum;
304-
if (levdatum->level)
305-
ebitmap_destroy(&levdatum->level->cat);
306-
kfree(levdatum->level);
304+
ebitmap_destroy(&levdatum->level.cat);
307305
}
308306
kfree(datum);
309307
return 0;
@@ -635,11 +633,11 @@ static int sens_index(void *key, void *datum, void *datap)
635633
p = datap;
636634

637635
if (!levdatum->isalias) {
638-
if (!levdatum->level->sens ||
639-
levdatum->level->sens > p->p_levels.nprim)
636+
if (!levdatum->level.sens ||
637+
levdatum->level.sens > p->p_levels.nprim)
640638
return -EINVAL;
641639

642-
p->sym_val_to_name[SYM_LEVELS][levdatum->level->sens - 1] = key;
640+
p->sym_val_to_name[SYM_LEVELS][levdatum->level.sens - 1] = key;
643641
}
644642

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

1621-
rc = -ENOMEM;
1622-
levdatum->level = kmalloc(sizeof(*levdatum->level), GFP_KERNEL);
1623-
if (!levdatum->level)
1624-
goto bad;
1625-
1626-
rc = mls_read_level(levdatum->level, fp);
1619+
rc = mls_read_level(&levdatum->level, fp);
16271620
if (rc)
16281621
goto bad;
16291622

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

2847-
rc = mls_write_level(levdatum->level, fp);
2840+
rc = mls_write_level(&levdatum->level, fp);
28482841
if (rc)
28492842
return rc;
28502843

security/selinux/ss/policydb.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ struct user_datum {
126126

127127
/* Sensitivity attributes */
128128
struct level_datum {
129-
struct mls_level *level; /* sensitivity and associated categories */
129+
struct mls_level level; /* sensitivity and associated categories */
130130
unsigned char isalias; /* is this sensitivity an alias for another? */
131131
};
132132

0 commit comments

Comments
 (0)