Re: [PATCH 2/3] SELinux: open code load_mutex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2008-06-06 at 22:47 +1000, James Morris wrote:
> On Fri, 6 Jun 2008, Stephen Smalley wrote:
> 
> > 
> > On Fri, 2008-06-06 at 18:58 +1000, James Morris wrote:
> > > Open code load_mutex as suggested by Andrew Morton.
> > > 
> > > Signed-off-by: James Morris <jmorris@xxxxxxxxx>
> > 
> > This is technically correct, but I believe that load_mutex is actually
> > obsolete and can be completely removed.  Note that
> > security_load_policy() is only called from selinuxfs while holding
> > sel_mutex there, which is required in order to synchronize with boolean
> > manipulation.  load_mutex is a leftover from before the age of policy
> > booleans.
> 
> Ok, that should be a separate patch, I think.

Ok, you can add my Acked-by to this patch then.

Acked-by:  Stephen Smalley <sds@xxxxxxxxxxxxx>

> 
> > 
> > > ---
> > >  security/selinux/ss/services.c |   21 +++++++++------------
> > >  1 files changed, 9 insertions(+), 12 deletions(-)
> > > 
> > > diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
> > > index e8ec54d..d06df33 100644
> > > --- a/security/selinux/ss/services.c
> > > +++ b/security/selinux/ss/services.c
> > > @@ -71,10 +71,7 @@ int selinux_policycap_openperm;
> > >  extern const struct selinux_class_perm selinux_class_perm;
> > >  
> > >  static DEFINE_RWLOCK(policy_rwlock);
> > > -
> > >  static DEFINE_MUTEX(load_mutex);
> > > -#define LOAD_LOCK mutex_lock(&load_mutex)
> > > -#define LOAD_UNLOCK mutex_unlock(&load_mutex)
> > >  
> > >  static struct sidtab sidtab;
> > >  struct policydb policydb;
> > > @@ -1456,17 +1453,17 @@ int security_load_policy(void *data, size_t len)
> > >  	int rc = 0;
> > >  	struct policy_file file = { data, len }, *fp = &file;
> > >  
> > > -	LOAD_LOCK;
> > > +	mutex_lock(&load_mutex);
> > >  
> > >  	if (!ss_initialized) {
> > >  		avtab_cache_init();
> > >  		if (policydb_read(&policydb, fp)) {
> > > -			LOAD_UNLOCK;
> > > +			mutex_unlock(&load_mutex);
> > >  			avtab_cache_destroy();
> > >  			return -EINVAL;
> > >  		}
> > >  		if (policydb_load_isids(&policydb, &sidtab)) {
> > > -			LOAD_UNLOCK;
> > > +			mutex_unlock(&load_mutex);
> > >  			policydb_destroy(&policydb);
> > >  			avtab_cache_destroy();
> > >  			return -EINVAL;
> > > @@ -1475,7 +1472,7 @@ int security_load_policy(void *data, size_t len)
> > >  		if (validate_classes(&policydb)) {
> > >  			printk(KERN_ERR
> > >  			       "SELinux:  the definition of a class is incorrect\n");
> > > -			LOAD_UNLOCK;
> > > +			mutex_unlock(&load_mutex);
> > >  			sidtab_destroy(&sidtab);
> > >  			policydb_destroy(&policydb);
> > >  			avtab_cache_destroy();
> > > @@ -1485,7 +1482,7 @@ int security_load_policy(void *data, size_t len)
> > >  		policydb_loaded_version = policydb.policyvers;
> > >  		ss_initialized = 1;
> > >  		seqno = ++latest_granting;
> > > -		LOAD_UNLOCK;
> > > +		mutex_unlock(&load_mutex);
> > >  		selinux_complete_init();
> > >  		avc_ss_reset(seqno);
> > >  		selnl_notify_policyload(seqno);
> > > @@ -1499,12 +1496,12 @@ int security_load_policy(void *data, size_t len)
> > >  #endif
> > >  
> > >  	if (policydb_read(&newpolicydb, fp)) {
> > > -		LOAD_UNLOCK;
> > > +		mutex_unlock(&load_mutex);
> > >  		return -EINVAL;
> > >  	}
> > >  
> > >  	if (sidtab_init(&newsidtab)) {
> > > -		LOAD_UNLOCK;
> > > +		mutex_unlock(&load_mutex);
> > >  		policydb_destroy(&newpolicydb);
> > >  		return -ENOMEM;
> > >  	}
> > > @@ -1552,7 +1549,7 @@ int security_load_policy(void *data, size_t len)
> > >  	seqno = ++latest_granting;
> > >  	policydb_loaded_version = policydb.policyvers;
> > >  	write_unlock_irq(&policy_rwlock);
> > > -	LOAD_UNLOCK;
> > > +	mutex_unlock(&load_mutex);
> > >  
> > >  	/* Free the old policydb and SID table. */
> > >  	policydb_destroy(&oldpolicydb);
> > > @@ -1566,7 +1563,7 @@ int security_load_policy(void *data, size_t len)
> > >  	return 0;
> > >  
> > >  err:
> > > -	LOAD_UNLOCK;
> > > +	mutex_unlock(&load_mutex);
> > >  	sidtab_destroy(&newsidtab);
> > >  	policydb_destroy(&newpolicydb);
> > >  	return rc;
> > 
> 
-- 
Stephen Smalley
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux