libselinux-2.4-4
- Flush the class/perm string mapping cache on policy reload (#1264051) - Fix restorecon when path has no context
This commit is contained in:
		
							parent
							
								
									8db7ce6b64
								
							
						
					
					
						commit
						fd198b3dc4
					
				| @ -755,6 +755,67 @@ index 7cf3139..364a746 100644 | ||||
|  	if (!selinux_mnt) { | ||||
|  		errno = ENOENT; | ||||
|  		return -1; | ||||
| diff --git libselinux-2.4/src/checkAccess.c libselinux-2.4/src/checkAccess.c
 | ||||
| index ee85ebc..8de5747 100644
 | ||||
| --- libselinux-2.4/src/checkAccess.c
 | ||||
| +++ libselinux-2.4/src/checkAccess.c
 | ||||
| @@ -8,10 +8,28 @@
 | ||||
|  #include "avc_internal.h" | ||||
|   | ||||
|  static pthread_once_t once = PTHREAD_ONCE_INIT; | ||||
| +static int selinux_enabled;
 | ||||
| +
 | ||||
| +static int avc_reset_callback(uint32_t event __attribute__((unused)),
 | ||||
| +		      security_id_t ssid __attribute__((unused)),
 | ||||
| +		      security_id_t tsid __attribute__((unused)),
 | ||||
| +		      security_class_t tclass __attribute__((unused)),
 | ||||
| +		      access_vector_t perms __attribute__((unused)),
 | ||||
| +		      access_vector_t *out_retained __attribute__((unused)))
 | ||||
| +{
 | ||||
| +	flush_class_cache();
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
|   | ||||
|  static void avc_init_once(void) | ||||
|  { | ||||
| -	avc_open(NULL, 0);
 | ||||
| +	selinux_enabled = is_selinux_enabled();
 | ||||
| +	if (selinux_enabled == 1) {
 | ||||
| +		if (avc_open(NULL, 0))
 | ||||
| +			return;
 | ||||
| +		avc_add_callback(avc_reset_callback, AVC_CALLBACK_RESET,
 | ||||
| +				 0, 0, 0, 0);
 | ||||
| +	}
 | ||||
|  } | ||||
|   | ||||
|  int selinux_check_access(const char *scon, const char *tcon, const char *class, const char *perm, void *aux) { | ||||
| @@ -21,18 +39,20 @@ int selinux_check_access(const char *scon, const char *tcon, const char *class,
 | ||||
|  	security_class_t sclass; | ||||
|  	access_vector_t av; | ||||
|   | ||||
| -	if (is_selinux_enabled() == 0)
 | ||||
| -		return 0;
 | ||||
| -
 | ||||
|  	__selinux_once(once, avc_init_once); | ||||
|   | ||||
| +	if (selinux_enabled != 1)
 | ||||
| +		return 0;
 | ||||
| +
 | ||||
|  	rc = avc_context_to_sid(scon, &scon_id); | ||||
|  	if (rc < 0) | ||||
|  		return rc; | ||||
|   | ||||
| -       rc = avc_context_to_sid(tcon, &tcon_id);
 | ||||
| -       if (rc < 0)
 | ||||
| -	       return rc;
 | ||||
| +	rc = avc_context_to_sid(tcon, &tcon_id);
 | ||||
| +	if (rc < 0)
 | ||||
| +		return rc;
 | ||||
| +
 | ||||
| +	(void) avc_netlink_check_nb();
 | ||||
|   | ||||
|         sclass = string_to_security_class(class); | ||||
|         if (sclass == 0) { | ||||
| diff --git libselinux-2.4/src/check_context.c libselinux-2.4/src/check_context.c
 | ||||
| index 52063fa..234749c 100644
 | ||||
| --- libselinux-2.4/src/check_context.c
 | ||||
| @ -1272,7 +1333,7 @@ index 30e9dc7..bec5f3b 100644 | ||||
|  { | ||||
|  	return get_path(SYSTEMD_CONTEXTS); | ||||
| diff --git libselinux-2.4/src/selinux_internal.h libselinux-2.4/src/selinux_internal.h
 | ||||
| index afb2170..9b1ca4d 100644
 | ||||
| index afb2170..16b5cdb 100644
 | ||||
| --- libselinux-2.4/src/selinux_internal.h
 | ||||
| +++ libselinux-2.4/src/selinux_internal.h
 | ||||
| @@ -82,6 +82,7 @@ hidden_proto(selinux_mkload_policy)
 | ||||
| @ -1283,7 +1344,16 @@ index afb2170..9b1ca4d 100644 | ||||
|      hidden_proto(selinux_sepgsql_context_path) | ||||
|      hidden_proto(selinux_systemd_contexts_path) | ||||
|      hidden_proto(selinux_path) | ||||
| @@ -137,3 +138,8 @@ extern int selinux_page_size hidden;
 | ||||
| @@ -101,6 +102,8 @@ hidden_proto(security_get_initial_context);
 | ||||
|  hidden_proto(security_get_initial_context_raw); | ||||
|  hidden_proto(selinux_reset_config); | ||||
|   | ||||
| +hidden void flush_class_cache(void);
 | ||||
| +
 | ||||
|  extern int load_setlocaldefs hidden; | ||||
|  extern int require_seusers hidden; | ||||
|  extern int selinux_page_size hidden; | ||||
| @@ -137,3 +140,8 @@ extern int selinux_page_size hidden;
 | ||||
|  		if (pthread_setspecific != NULL)		\ | ||||
|  			pthread_setspecific(KEY, VALUE);	\ | ||||
|  	} while (0) | ||||
| @ -1293,10 +1363,30 @@ index afb2170..9b1ca4d 100644 | ||||
| +
 | ||||
| +extern int has_selinux_config hidden;
 | ||||
| diff --git libselinux-2.4/src/selinuxswig_python.i libselinux-2.4/src/selinuxswig_python.i
 | ||||
| index ae72246..c9a2341 100644
 | ||||
| index ae72246..8cea18d 100644
 | ||||
| --- libselinux-2.4/src/selinuxswig_python.i
 | ||||
| +++ libselinux-2.4/src/selinuxswig_python.i
 | ||||
| @@ -31,9 +31,9 @@ def restorecon(path, recursive=False):
 | ||||
| @@ -8,7 +8,7 @@
 | ||||
|   | ||||
|  %pythoncode %{ | ||||
|   | ||||
| -import shutil, os, stat
 | ||||
| +import shutil, os, errno, stat
 | ||||
|   | ||||
|  DISABLED = -1 | ||||
|  PERMISSIVE = 0 | ||||
| @@ -26,14 +26,19 @@ def restorecon(path, recursive=False):
 | ||||
|          status, context = matchpathcon(path, mode) | ||||
|   | ||||
|      if status == 0: | ||||
| -        status, oldcontext = lgetfilecon(path)
 | ||||
| +        try:
 | ||||
| +            status, oldcontext = lgetfilecon(path)
 | ||||
| +        except OSError as e:
 | ||||
| +            if e.errno != errno.ENODATA:
 | ||||
| +                raise
 | ||||
| +            oldcontext = None
 | ||||
|          if context != oldcontext: | ||||
|              lsetfilecon(path, context) | ||||
|   | ||||
|          if recursive: | ||||
| @ -1328,6 +1418,39 @@ index d05969c..3f0200e 100644 | ||||
|  	if (rc < 0 && errno == ENOTSUP) { | ||||
|  		char * ccontext = NULL; | ||||
|  		int err = errno; | ||||
| diff --git libselinux-2.4/src/stringrep.c libselinux-2.4/src/stringrep.c
 | ||||
| index 9ae8248..2dbec2b 100644
 | ||||
| --- libselinux-2.4/src/stringrep.c
 | ||||
| +++ libselinux-2.4/src/stringrep.c
 | ||||
| @@ -158,6 +158,28 @@ err1:
 | ||||
|  	return NULL; | ||||
|  } | ||||
|   | ||||
| +hidden void flush_class_cache(void)
 | ||||
| +{
 | ||||
| +	struct discover_class_node *cur = discover_class_cache, *prev = NULL;
 | ||||
| +	size_t i;
 | ||||
| +
 | ||||
| +	while (cur != NULL) {
 | ||||
| +		free(cur->name);
 | ||||
| +
 | ||||
| +		for (i = 0; i < MAXVECTORS; i++)
 | ||||
| +			free(cur->perms[i]);
 | ||||
| +
 | ||||
| +		free(cur->perms);
 | ||||
| +
 | ||||
| +		prev = cur;
 | ||||
| +		cur = cur->next;
 | ||||
| +
 | ||||
| +		free(prev);
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	discover_class_cache = NULL;
 | ||||
| +}
 | ||||
| +
 | ||||
|  security_class_t string_to_security_class(const char *s) | ||||
|  { | ||||
|  	struct discover_class_node *node; | ||||
| diff --git libselinux-2.4/utils/Makefile libselinux-2.4/utils/Makefile
 | ||||
| index f469924..5499538 100644
 | ||||
| --- libselinux-2.4/utils/Makefile
 | ||||
|  | ||||
| @ -9,7 +9,7 @@ | ||||
| Summary: SELinux library and simple utilities | ||||
| Name: libselinux | ||||
| Version: 2.4 | ||||
| Release: 3%{?dist} | ||||
| Release: 4%{?dist} | ||||
| License: Public Domain | ||||
| Group: System Environment/Libraries | ||||
| # https://github.com/SELinuxProject/selinux/wiki/Releases | ||||
| @ -18,7 +18,7 @@ Source1: selinuxconlist.8 | ||||
| Source2: selinuxdefcon.8 | ||||
| Url: https://github.com/SELinuxProject/selinux/wiki | ||||
| # use make-rhat-patches.sh to create following patches from https://github.com/fedora-selinux/selinux/ | ||||
| # HEAD https://github.com/fedora-selinux/selinux/commit/36fd8bb4b36bb1ca3aa10e3226136459e6ed2498 | ||||
| # HEAD https://github.com/fedora-selinux/selinux/commit/8c09d34e464e79a602fb9c9408554279aede3b6b | ||||
| Patch1: libselinux-rhat.patch | ||||
| BuildRequires: pkgconfig python-devel ruby-devel ruby libsepol-static >= %{libsepolver} swig pcre-devel xz-devel | ||||
| %if 0%{?with_python3} | ||||
| @ -247,6 +247,10 @@ rm -rf %{buildroot} | ||||
| %{ruby_vendorarchdir}/selinux.so | ||||
| 
 | ||||
| %changelog | ||||
| * Wed Sep 30 2015 Petr Lautrbach <plautrba@redhat.com> 2.4-4 | ||||
| - Flush the class/perm string mapping cache on policy reload (#1264051) | ||||
| - Fix restorecon when path has no context | ||||
| 
 | ||||
| * Wed Sep 02 2015 Petr Lautrbach <plautrba@redhat.com> 2.4-3 | ||||
| - Simplify procattr cache (#1257157,#1232371) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user