int avtab_read(struct avtab *a, void *fp, struct policydb *pol) { int rc; __le32 buf[1]; u32 nel, i; rc = next_entry(buf, fp, sizeof(u32)); if (rc < 0) { printk(KERN_ERR "SELinux: avtab: truncated table\n"); goto bad; } nel = le32_to_cpu(buf[0]); if (!nel) { printk(KERN_ERR "SELinux: avtab: table is empty\n"); rc = -EINVAL; goto bad; } rc = avtab_alloc(a, nel); if (rc) goto bad; for (i = 0; i < nel; i++) { rc = avtab_read_item(a, fp, pol, avtab_insertf, NULL); if (rc) { if (rc == -ENOMEM) printk(KERN_ERR "SELinux: avtab: out of memory\n"); else if (rc == -EEXIST) printk(KERN_ERR "SELinux: avtab: duplicate entry\n"); else rc = -EINVAL; goto bad; } } rc = 0; out: return rc; bad: avtab_destroy(a); goto out; }
int avtab_read(struct avtab *a, void *fp, u32 config) { int i, rc = -EINVAL; struct avtab_key avkey; struct avtab_datum avdatum; u32 *buf; u32 nel; buf = next_entry(fp, sizeof(u32)); if (!buf) { printk(KERN_ERR "security: avtab: truncated table\n"); goto bad; } nel = le32_to_cpu(buf[0]); if (!nel) { printk(KERN_ERR "security: avtab: table is empty\n"); goto bad; } for (i = 0; i < nel; i++) { if (avtab_read_item(fp, &avdatum, &avkey)) goto bad; rc = avtab_insert(a, &avkey, &avdatum); if (rc) { if (rc == -ENOMEM) printk(KERN_ERR "security: avtab: out of memory\n"); if (rc == -EEXIST) printk(KERN_ERR "security: avtab: duplicate entry\n"); goto bad; } } rc = 0; out: return rc; bad: avtab_destroy(a); goto out; }