All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ivan Gyurdiev <gyurdiev@redhat.com>
To: selinux@tycho.nsa.gov
Subject: [ libsepol 1/6] Fix memory leaks
Date: Thu, 21 Jul 2005 13:36:03 -0400	[thread overview]
Message-ID: <1121967363.9844.21.camel@celtics.boston.redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 226 bytes --]

The following patch fixes memory leaks.
The ones in policydb_convert are due to double
initialization (policydb_read does its own init).

libsepol-1.2-fix_memory_leaks.diff

This patch depends on
libsepol-1.1-context.diff





[-- Attachment #2: libsepol-1.2-fix_memory_leaks.diff --]
[-- Type: text/x-patch, Size: 3724 bytes --]

diff -aru libsepol.work/src/constraint.c libsepol-1.2-fix_memory_leaks/src/constraint.c
--- libsepol.work/src/constraint.c	2005-07-18 15:05:30.000000000 -0400
+++ libsepol-1.2-fix_memory_leaks/src/constraint.c	2005-07-21 10:58:05.000000000 -0400
@@ -30,6 +30,7 @@
         if (expr != NULL) {
                 ebitmap_destroy(&expr->names);
                 type_set_destroy(expr->type_names);
+                free(expr->type_names);
                 free(expr);
         }
 }
diff -aru libsepol.work/src/policydb.c libsepol-1.2-fix_memory_leaks/src/policydb.c
--- libsepol.work/src/policydb.c	2005-07-21 13:06:49.000000000 -0400
+++ libsepol-1.2-fix_memory_leaks/src/policydb.c	2005-07-21 10:58:05.000000000 -0400
@@ -870,6 +870,8 @@
 		free(p->role_val_to_struct);
 	if (p->user_val_to_struct)
 		free(p->user_val_to_struct);
+	if (p->type_val_to_struct)
+		free(p->type_val_to_struct);
 
 	for (i = 0; i < SYM_NUM; i++) {
 		hashtab_map(p->scope[i].table, scope_destroy, 0);
@@ -945,6 +947,7 @@
         if (cur != NULL) {
                 free (cur->decl_ids);
         }
+	free(cur);
         return 0;
 }
 
@@ -1266,8 +1269,10 @@
 				depth++;
 				break;
 			case CEXPR_NAMES:
-				if (!allowxtarget && (e->attr & CEXPR_XTARGET))
+				if (!allowxtarget && (e->attr & CEXPR_XTARGET)) {
+					constraint_expr_destroy(e);
 					return -1;
+				}
 				if (depth == (CEXPR_MAXDEPTH-1)) {
 					constraint_expr_destroy(e);
 					return -1;
diff -aru libsepol.work/src/policydb_convert.c libsepol-1.2-fix_memory_leaks/src/policydb_convert.c
--- libsepol.work/src/policydb_convert.c	2005-07-18 15:05:30.000000000 -0400
+++ libsepol-1.2-fix_memory_leaks/src/policydb_convert.c	2005-07-21 11:41:52.000000000 -0400
@@ -34,10 +34,6 @@
 	policy_file_t pf;
 	struct policydb tmp_policydb;
 
-	if (policydb_init(&tmp_policydb, POLICY_KERN) < 0) {
-		DEBUG(__FUNCTION__, "could not initialize temporary policy\n");
-		goto err;
-	}
 	/* Set the policy version for the new policy image we are
 	   about to generate so that it stays the same as the original,
 	   even if we support a newer one. */
@@ -50,7 +46,7 @@
 	if (policydb_write(policydb, &pf)) {
 		DEBUG(__FUNCTION__, "could not compute policy length\n"); 
 		errno = EINVAL;	
-		goto err_free;
+		goto err;
 	}
 
 	/* Allocate the new policy image. */
@@ -58,7 +54,7 @@
 	pf.data = malloc(pf.len);
 	if (!pf.data) {
 		DEBUG(__FUNCTION__, "out of memory\n");
-		goto err_free;
+		goto err;
         }
 
 	/* Need to save len and data prior to modification by policydb_write.*/
@@ -69,7 +65,7 @@
 	if (policydb_write(policydb, &pf)) {
 		DEBUG(__FUNCTION__, "could not write policy\n");
 		errno = EINVAL;
-		goto err_free;
+		goto err;
         }
 
 	/* Verify the new policy image. */
@@ -79,7 +75,7 @@
         if (policydb_read(&tmp_policydb, &pf, 0)) {
 		DEBUG(__FUNCTION__, "new policy image is invalid\n");
                 errno = EINVAL;
-		goto err_free;
+		goto err;
         }
 	policydb_destroy(&tmp_policydb);
 
@@ -91,9 +87,6 @@
 	sepol_set_policyvers(POLICY_KERN, POLICYDB_VERSION_MAX);
         return STATUS_SUCCESS;
 
-	err_free:
-	policydb_destroy(&tmp_policydb);
-
 	err:
 	DEBUG(__FUNCTION__, "could not create policy image\n");
 
diff -aru libsepol.work/src/util.c libsepol-1.2-fix_memory_leaks/src/util.c
--- libsepol.work/src/util.c	2005-07-18 15:05:30.000000000 -0400
+++ libsepol-1.2-fix_memory_leaks/src/util.c	2005-07-21 10:39:55.000000000 -0400
@@ -192,6 +192,7 @@
                 scope_datum->decl_ids = NULL;
                 scope_datum->decl_ids_len = 0;
                 if ((rc = hashtab_insert(pol->scope[sym].table, key, scope_datum)) != 0) {
+			free(scope_datum);
                         return rc;
                 }
         }

             reply	other threads:[~2005-07-21 17:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-21 17:36 Ivan Gyurdiev [this message]
2005-07-21 18:36 ` [ libsepol 1/6] Fix memory leaks Joshua Brindle
2005-07-21 18:37   ` Ivan Gyurdiev

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1121967363.9844.21.camel@celtics.boston.redhat.com \
    --to=gyurdiev@redhat.com \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.