diff mbox series

[5/8] Revert "libsepol: implement new kernel binary format for avtab"

Message ID 20230726142549.94685-6-jwcart2@gmail.com (mailing list archive)
State Accepted
Commit 97450c623bd2
Delegated to: Petr Lautrbach
Headers show
Series Revert the prefix/suffix filename transition patches | expand

Commit Message

James Carter July 26, 2023, 2:25 p.m. UTC
This reverts commit 7b77edd91946d8a415cddc596765d8c2e8bd6f63.

Signed-off-by: James Carter <jwcart2@gmail.com>
---
 libsepol/include/sepol/policydb/policydb.h |  3 +-
 libsepol/src/avtab.c                       | 88 ++--------------------
 libsepol/src/policydb.c                    |  8 --
 libsepol/src/write.c                       | 86 ++++-----------------
 4 files changed, 21 insertions(+), 164 deletions(-)
diff mbox series

Patch

diff --git a/libsepol/include/sepol/policydb/policydb.h b/libsepol/include/sepol/policydb/policydb.h
index 528c1cad..d30f26af 100644
--- a/libsepol/include/sepol/policydb/policydb.h
+++ b/libsepol/include/sepol/policydb/policydb.h
@@ -722,11 +722,10 @@  extern int policydb_set_target_platform(policydb_t *p, int platform);
 #define POLICYDB_VERSION_INFINIBAND		31 /* Linux-specific */
 #define POLICYDB_VERSION_GLBLUB		32
 #define POLICYDB_VERSION_COMP_FTRANS	33 /* compressed filename transitions */
-#define POLICYDB_VERSION_AVTAB_FTRANS	34 /* filename transitions moved to avtab */
 
 /* Range of policy versions we understand*/
 #define POLICYDB_VERSION_MIN	POLICYDB_VERSION_BASE
-#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_AVTAB_FTRANS
+#define POLICYDB_VERSION_MAX	POLICYDB_VERSION_COMP_FTRANS
 
 /* Module versions and specific changes*/
 #define MOD_POLICYDB_VERSION_BASE		4
diff --git a/libsepol/src/avtab.c b/libsepol/src/avtab.c
index 2a9564ba..eef259cf 100644
--- a/libsepol/src/avtab.c
+++ b/libsepol/src/avtab.c
@@ -446,87 +446,6 @@  void avtab_hash_eval(avtab_t * h, char *tag)
 	     tag, h->nel, slots_used, h->nslot, max_chain_len);
 }
 
-static int avtab_read_name_trans(policy_file_t *fp, symtab_t *target)
-{
-	int rc;
-	uint32_t buf32[2], nel, i, len, *otype = NULL;
-	char *name = NULL;
-
-	/* read number of name transitions */
-	rc = next_entry(buf32, fp, sizeof(uint32_t) * 1);
-	if (rc < 0)
-		return rc;
-	nel = le32_to_cpu(buf32[0]);
-
-	rc = symtab_init(target, nel);
-	if (rc < 0)
-		return rc;
-
-	/* read name transitions */
-	for (i = 0; i < nel; i++) {
-		rc = SEPOL_ENOMEM;
-		otype = malloc(sizeof(uint32_t));
-		if (!otype)
-			goto exit;
-
-		/* read name transition otype and name length */
-		rc = next_entry(buf32, fp, sizeof(uint32_t) * 2);
-		if (rc < 0)
-			goto exit;
-		*otype = le32_to_cpu(buf32[0]);
-		len = le32_to_cpu(buf32[1]);
-
-		/* read the name */
-		rc = str_read(&name, fp, len);
-		if (rc < 0)
-			goto exit;
-
-		rc = hashtab_insert(target->table, name, otype);
-		if (rc < 0)
-			goto exit;
-		otype = NULL;
-		name = NULL;
-	}
-
-exit:
-	free(otype);
-	free(name);
-	return rc;
-}
-
-static int avtab_trans_read(policy_file_t *fp, uint32_t vers,
-			    avtab_trans_t *trans)
-{
-	int rc;
-	uint32_t buf32[1];
-
-	if (vers < POLICYDB_VERSION_AVTAB_FTRANS) {
-		rc = next_entry(buf32, fp, sizeof(uint32_t));
-		if (rc < 0) {
-			ERR(fp->handle, "truncated entry");
-			return SEPOL_ERR;
-		}
-		trans->otype = le32_to_cpu(*buf32);
-		return SEPOL_OK;
-	}
-
-	/* read otype */
-	rc = next_entry(buf32, fp, sizeof(uint32_t) * 1);
-	if (rc < 0)
-		return rc;
-	trans->otype = le32_to_cpu(buf32[0]);
-
-	rc = avtab_read_name_trans(fp, &trans->name_trans);
-	if (rc < 0)
-		goto bad;
-
-	return SEPOL_OK;
-
-bad:
-	avtab_trans_destroy(trans);
-	return rc;
-}
-
 /* Ordering of datums in the original avtab format in the policy file. */
 static const uint16_t spec_order[] = {
 	AVTAB_ALLOWED,
@@ -690,9 +609,12 @@  int avtab_read_item(struct policy_file *fp, uint32_t vers, avtab_t * a,
 			xperms.perms[i] = le32_to_cpu(buf32[i]);
 		datum.xperms = &xperms;
 	} else if (key.specified & AVTAB_TRANSITION) {
-		rc = avtab_trans_read(fp, vers, &trans);
-		if (rc < 0)
+		rc = next_entry(buf32, fp, sizeof(uint32_t));
+		if (rc < 0) {
+			ERR(fp->handle, "truncated entry");
 			return -1;
+		}
+		trans.otype = le32_to_cpu(*buf32);
 		datum.trans = &trans;
 	} else {
 		rc = next_entry(buf32, fp, sizeof(uint32_t));
diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
index b15d4163..4913ee21 100644
--- a/libsepol/src/policydb.c
+++ b/libsepol/src/policydb.c
@@ -208,13 +208,6 @@  static const struct policydb_compat_info policydb_compat[] = {
 	 .ocon_num = OCON_IBENDPORT + 1,
 	 .target_platform = SEPOL_TARGET_SELINUX,
 	},
-	{
-	 .type = POLICY_KERN,
-	 .version = POLICYDB_VERSION_AVTAB_FTRANS,
-	 .sym_num = SYM_NUM,
-	 .ocon_num = OCON_IBENDPORT + 1,
-	 .target_platform = SEPOL_TARGET_SELINUX,
-	},
 	{
 	 .type = POLICY_BASE,
 	 .version = MOD_POLICYDB_VERSION_BASE,
@@ -4106,7 +4099,6 @@  int policydb_read(policydb_t * p, struct policy_file *fp, unsigned verbose)
 		if (role_allow_read(&p->role_allow, fp))
 			goto bad;
 		if (r_policyvers >= POLICYDB_VERSION_FILENAME_TRANS &&
-		    r_policyvers < POLICYDB_VERSION_AVTAB_FTRANS &&
 		    avtab_filename_trans_read(fp, r_policyvers, &p->te_avtab))
 			goto bad;
 	} else {
diff --git a/libsepol/src/write.c b/libsepol/src/write.c
index 68495198..2035b350 100644
--- a/libsepol/src/write.c
+++ b/libsepol/src/write.c
@@ -102,56 +102,6 @@  static uint16_t spec_order[] = {
 	AVTAB_MEMBER
 };
 
-static int avtab_trans_write_helper(hashtab_key_t hkey, hashtab_datum_t hdatum,
-				    void *fp)
-{
-	char *name = hkey;
-	uint32_t *otype = hdatum;
-	uint32_t buf32[2], len;
-	size_t items;
-
-	/* write filename transition otype and name length */
-	len = strlen(name);
-	buf32[0] = cpu_to_le32(*otype);
-	buf32[1] = cpu_to_le32(len);
-	items = put_entry(buf32, sizeof(uint32_t), 2, fp);
-	if (items != 2)
-		return -1;
-
-	/* write filename transition name */
-	items = put_entry(name, sizeof(char), len, fp);
-	if (items != len)
-		return -1;
-
-	return 0;
-}
-
-static int avtab_trans_write(policydb_t *p, const avtab_trans_t *cur,
-			     policy_file_t *fp)
-{
-	size_t items;
-	uint32_t buf32[2];
-
-	if (p->policyvers >= POLICYDB_VERSION_AVTAB_FTRANS) {
-		/* write otype and number of filename transitions */
-		buf32[0] = cpu_to_le32(cur->otype);
-		buf32[1] = cpu_to_le32(hashtab_nel(cur->name_trans.table));
-		items = put_entry(buf32, sizeof(uint32_t), 2, fp);
-		if (items != 2)
-			return -1;
-
-		/* write filename transitions */
-		return hashtab_map(cur->name_trans.table,
-				   avtab_trans_write_helper, fp);
-	} else if (cur->otype) {
-		buf32[0] = cpu_to_le32(cur->otype);
-		items = put_entry(buf32, sizeof(uint32_t), 1, fp);
-		if (items != 1)
-			return -1;
-	}
-	return 0;
-}
-
 static int avtab_write_item(policydb_t * p,
 			    avtab_ptr_t cur, struct policy_file *fp,
 			    unsigned merge, unsigned commit, uint32_t * nel)
@@ -166,12 +116,8 @@  static int avtab_write_item(policydb_t * p,
 				&& p->policyvers < POLICYDB_VERSION_AVTAB);
 	unsigned int i;
 
-	/*
-	 * skip entries which only contain filename transitions in versions
-	 * before filename transitions were moved to avtab
-	 */
-	if (p->policyvers < POLICYDB_VERSION_AVTAB_FTRANS &&
-	    cur->key.specified & AVTAB_TRANSITION && !cur->datum.trans->otype) {
+	/* skip entries which only contain filename transitions */
+	if (cur->key.specified & AVTAB_TRANSITION && !cur->datum.trans->otype) {
 		/* if oldvers, reduce nel, because this node will be skipped */
 		if (oldvers && nel)
 			(*nel)--;
@@ -325,7 +271,9 @@  static int avtab_write_item(policydb_t * p,
 		if (items != 8)
 			return POLICYDB_ERROR;
 	} else if (cur->key.specified & AVTAB_TRANSITION) {
-		if (avtab_trans_write(p, cur->datum.trans, fp) < 0)
+		buf32[0] = cpu_to_le32(cur->datum.trans->otype);
+		items = put_entry(buf32, sizeof(uint32_t), 1, fp);
+		if (items != 1)
 			return POLICYDB_ERROR;
 	} else {
 		buf32[0] = cpu_to_le32(cur->datum.data);
@@ -378,18 +326,15 @@  static int avtab_write(struct policydb *p, avtab_t * a, struct policy_file *fp)
 		 * filename transitions.
 		 */
 		nel = a->nel;
-		if (p->policyvers < POLICYDB_VERSION_AVTAB_FTRANS) {
-			/*
-			 * entries containing only filename transitions are
-			 * skipped and written out later
-			 */
-			for (i = 0; i < a->nslot; i++) {
-				for (cur = a->htable[i]; cur; cur = cur->next) {
-					if ((cur->key.specified
-					     & AVTAB_TRANSITION) &&
-					    !cur->datum.trans->otype)
-						nel--;
-				}
+		/*
+		 * entries containing only filename transitions are skipped and
+		 * written out later
+		 */
+		for (i = 0; i < a->nslot; i++) {
+			for (cur = a->htable[i]; cur; cur = cur->next) {
+				if (cur->key.specified & AVTAB_TRANSITION &&
+				    !cur->datum.trans->otype)
+					nel--;
 			}
 		}
 		nel = cpu_to_le32(nel);
@@ -2681,8 +2626,7 @@  int policydb_write(policydb_t * p, struct policy_file *fp)
 		if (role_allow_write(p->role_allow, fp))
 			return POLICYDB_ERROR;
 		if (p->policyvers >= POLICYDB_VERSION_FILENAME_TRANS) {
-			if (p->policyvers < POLICYDB_VERSION_AVTAB_FTRANS &&
-			    avtab_filename_trans_write(p, &p->te_avtab, fp))
+			if (avtab_filename_trans_write(p, &p->te_avtab, fp))
 				return POLICYDB_ERROR;
 		} else if (avtab_has_filename_transitions(&p->te_avtab)) {
 			WARN(fp->handle,