diff options
Diffstat (limited to 'security/selinux/ss/avtab.c')
| -rw-r--r-- | security/selinux/ss/avtab.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/security/selinux/ss/avtab.c b/security/selinux/ss/avtab.c index 77a917ccc045..a3dd9faa19c0 100644 --- a/security/selinux/ss/avtab.c +++ b/security/selinux/ss/avtab.c | |||
| @@ -501,6 +501,48 @@ bad: | |||
| 501 | goto out; | 501 | goto out; |
| 502 | } | 502 | } |
| 503 | 503 | ||
| 504 | int avtab_write_item(struct policydb *p, struct avtab_node *cur, void *fp) | ||
| 505 | { | ||
| 506 | __le16 buf16[4]; | ||
| 507 | __le32 buf32[1]; | ||
| 508 | int rc; | ||
| 509 | |||
| 510 | buf16[0] = cpu_to_le16(cur->key.source_type); | ||
| 511 | buf16[1] = cpu_to_le16(cur->key.target_type); | ||
| 512 | buf16[2] = cpu_to_le16(cur->key.target_class); | ||
| 513 | buf16[3] = cpu_to_le16(cur->key.specified); | ||
| 514 | rc = put_entry(buf16, sizeof(u16), 4, fp); | ||
| 515 | if (rc) | ||
| 516 | return rc; | ||
| 517 | buf32[0] = cpu_to_le32(cur->datum.data); | ||
| 518 | rc = put_entry(buf32, sizeof(u32), 1, fp); | ||
| 519 | if (rc) | ||
| 520 | return rc; | ||
| 521 | return 0; | ||
| 522 | } | ||
| 523 | |||
| 524 | int avtab_write(struct policydb *p, struct avtab *a, void *fp) | ||
| 525 | { | ||
| 526 | unsigned int i; | ||
| 527 | int rc = 0; | ||
| 528 | struct avtab_node *cur; | ||
| 529 | __le32 buf[1]; | ||
| 530 | |||
| 531 | buf[0] = cpu_to_le32(a->nel); | ||
| 532 | rc = put_entry(buf, sizeof(u32), 1, fp); | ||
| 533 | if (rc) | ||
| 534 | return rc; | ||
| 535 | |||
| 536 | for (i = 0; i < a->nslot; i++) { | ||
| 537 | for (cur = a->htable[i]; cur; cur = cur->next) { | ||
| 538 | rc = avtab_write_item(p, cur, fp); | ||
| 539 | if (rc) | ||
| 540 | return rc; | ||
| 541 | } | ||
| 542 | } | ||
| 543 | |||
| 544 | return rc; | ||
| 545 | } | ||
| 504 | void avtab_cache_init(void) | 546 | void avtab_cache_init(void) |
| 505 | { | 547 | { |
| 506 | avtab_node_cachep = kmem_cache_create("avtab_node", | 548 | avtab_node_cachep = kmem_cache_create("avtab_node", |
