[libsemanage] Attempt to allocate memory for selinux_binary_policy_path and free memory

Daniel J Walsh dwalsh at fedoraproject.org
Fri Jul 13 20:38:08 UTC 2012


commit 5f729783808512a95782af421347e59d3052f6a6
Author: Dan Walsh <dwalsh at redhat.com>
Date:   Fri Jul 13 16:37:22 2012 -0400

    Attempt to allocate memory for selinux_binary_policy_path and free memory
    
    - allocated by asprintf.

 libsemanage-rhat.patch |   51 +++++++++++++++++++++++++++++++++++++++++++++--
 libsemanage.spec       |    7 +++--
 2 files changed, 52 insertions(+), 6 deletions(-)
---
diff --git a/libsemanage-rhat.patch b/libsemanage-rhat.patch
index 6c5a31e..f60ce5e 100644
--- a/libsemanage-rhat.patch
+++ b/libsemanage-rhat.patch
@@ -29,15 +29,60 @@ index fc64919..c63bb22 100644
  $(LIBA): $(OBJS)
  	$(AR) rcs $@ $^
 diff --git a/libsemanage/src/handle.c b/libsemanage/src/handle.c
-index 7fcd2b4..f5cd4d0 100644
+index 7fcd2b4..18babe6 100644
 --- a/libsemanage/src/handle.c
 +++ b/libsemanage/src/handle.c
-@@ -147,7 +147,8 @@ const char *semanage_binary_policy_path() {
+@@ -52,6 +52,26 @@ static char *private_usersconf_path = NULL;
+ static char *private_netfilter_context_path = NULL;
+ static char *private_policy_root = NULL;
+ 
++static char *get_policy_path(void) {
++	char *dup_path = NULL;
++	int max = security_policyvers();
++	if (max < 0) 
++		max = sepol_policy_kern_vers_max();
++
++	char *policy_path = selinux_binary_policy_path_min_max(0, &max);
++	if (policy_path)  {
++		dup_path = strdup(policy_path);
++		free(policy_path);
++	} else {
++		/* No Policy installed so just do max */
++		int ret = asprintf(&policy_path, "%s.%d", selinux_binary_policy_path(), sepol_policy_kern_vers_max());
++		if (ret > 0)
++			dup_path = strdup(policy_path);
++		free(policy_path);
++	}
++	return dup_path;
++}
++
+ void semanage_free_root() {
+ 	free(private_selinux_path); private_selinux_path = NULL;
+ 	free(private_semanage_conf_path); private_semanage_conf_path = NULL;
+@@ -91,9 +111,15 @@ int semanage_set_root(const char *path) {
+ 		goto error;
+ 	}
+ 
+-	if ( asprintf(&private_binary_policy_path, "%s/%s", path, selinux_binary_policy_path()) < 0 ) {
++	char *policy_path = get_policy_path();
++	if (! policy_path) 
++		goto error;
++
++	if ( asprintf(&private_binary_policy_path, "%s/%s", path, policy_path) < 0 ) {
++		free(policy_path);
+ 		goto error;
+ 	}
++	free(policy_path);
+ 
+ 	if ( asprintf(&private_usersconf_path, "%s/%s", path, selinux_usersconf_path()) < 0 ) {
+ 		goto error;
+@@ -147,7 +173,9 @@ const char *semanage_binary_policy_path() {
  //	printf("private_binary_policy_path %s\n", private_binary_policy_path);
  	if (private_binary_policy_path)
  		return private_binary_policy_path;
 -	return selinux_binary_policy_path();
-+	private_binary_policy_path = selinux_binary_policy_path();
++
++	private_binary_policy_path = get_policy_path();
 +	return private_binary_policy_path;
  }
  
diff --git a/libsemanage.spec b/libsemanage.spec
index 27e373a..6cd7497 100644
--- a/libsemanage.spec
+++ b/libsemanage.spec
@@ -5,7 +5,7 @@
 %endif
 
 %define libsepolver 2.1.5-1
-%define libselinuxver 2.1.10-1
+%define libselinuxver 2.1.11-2
 
 Summary: SELinux binary policy manipulation library 
 Name: libsemanage
@@ -180,8 +180,9 @@ rm -rf ${RPM_BUILD_ROOT}
 %endif # if with_python3
 
 %changelog
-* Thu Jul 12 2012 Dan Walsh <dwalsh at redhat.com> - 2.1.8-3
-- Revert Eric Paris Patch for binary_policy_path
+* Fri Jul 13 2012 Dan Walsh <dwalsh at redhat.com> - 2.1.8-3
+- Attempt to allocate memory for selinux_binary_policy_path and free memory 
+- allocated by asprintf.
 
 * Thu Jul 12 2012 Dan Walsh <dwalsh at redhat.com> - 2.1.8-2
 - Fix asprintf within an asprintf call


More information about the scm-commits mailing list