Commit 253050f5 authored by Ondrej Mosnacek's avatar Ondrej Mosnacek Committed by Paul Moore
Browse files

selinux: factor out loop body from filename_trans_read()



It simplifies cleanup in the error path. This will be extra useful in
later patch.

Signed-off-by: default avatarOndrej Mosnacek <omosnace@redhat.com>
Acked-by: default avatarStephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
parent 4ca54d3d
Loading
Loading
Loading
Loading
+63 −59
Original line number Diff line number Diff line
@@ -1880,31 +1880,18 @@ out:
	return rc;
}

static int filename_trans_read(struct policydb *p, void *fp)
static int filename_trans_read_one(struct policydb *p, void *fp)
{
	struct filename_trans *ft;
	struct filename_trans_datum *otype;
	char *name;
	u32 nel, len;
	struct filename_trans_datum *otype = NULL;
	char *name = NULL;
	u32 len;
	__le32 buf[4];
	int rc, i;

	if (p->policyvers < POLICYDB_VERSION_FILENAME_TRANS)
		return 0;

	rc = next_entry(buf, fp, sizeof(u32));
	if (rc)
		return rc;
	nel = le32_to_cpu(buf[0]);

	for (i = 0; i < nel; i++) {
		otype = NULL;
		name = NULL;
	int rc;

		rc = -ENOMEM;
	ft = kzalloc(sizeof(*ft), GFP_KERNEL);
	if (!ft)
			goto out;
		return -ENOMEM;

	rc = -ENOMEM;
	otype = kmalloc(sizeof(*otype), GFP_KERNEL);
@@ -1944,22 +1931,39 @@ static int filename_trans_read(struct policydb *p, void *fp)
		 * Do not return -EEXIST to the caller, or the system
		 * will not boot.
		 */
			if (rc != -EEXIST)
		if (rc == -EEXIST)
			rc = 0;
		goto out;
			/* But free memory to avoid memory leak. */
			kfree(ft);
			kfree(name);
			kfree(otype);
		}
	}
	hash_eval(p->filename_trans, "filenametr");
	return 0;
out:
	kfree(ft);
	kfree(name);
	kfree(otype);
	return rc;
}

static int filename_trans_read(struct policydb *p, void *fp)
{
	u32 nel;
	__le32 buf[1];
	int rc, i;

	if (p->policyvers < POLICYDB_VERSION_FILENAME_TRANS)
		return 0;

	rc = next_entry(buf, fp, sizeof(u32));
	if (rc)
		return rc;
	nel = le32_to_cpu(buf[0]);

	for (i = 0; i < nel; i++) {
		rc = filename_trans_read_one(p, fp);
		if (rc)
			return rc;
	}
	hash_eval(p->filename_trans, "filenametr");
	return 0;
}

static int genfs_read(struct policydb *p, void *fp)