diff options
Diffstat (limited to 'security/selinux')
| -rw-r--r-- | security/selinux/hooks.c | 5 | ||||
| -rw-r--r-- | security/selinux/include/classmap.h | 4 | ||||
| -rw-r--r-- | security/selinux/include/security.h | 2 | ||||
| -rw-r--r-- | security/selinux/selinuxfs.c | 6 | 
4 files changed, 9 insertions, 8 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index 372ec6502aa..9292a8971e6 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -2157,8 +2157,7 @@ static inline void flush_unauthorized_files(const struct cred *cred,  						get_file(devnull);  					} else {  						devnull = dentry_open( -							dget(selinux_null), -							mntget(selinuxfs_mount), +							&selinux_null,  							O_RDWR, cred);  						if (IS_ERR(devnull)) {  							devnull = NULL; @@ -2717,7 +2716,7 @@ static int selinux_inode_setattr(struct dentry *dentry, struct iattr *iattr)  			ATTR_ATIME_SET | ATTR_MTIME_SET | ATTR_TIMES_SET))  		return dentry_has_perm(cred, dentry, FILE__SETATTR); -	if (ia_valid & ATTR_SIZE) +	if (selinux_policycap_openperm && (ia_valid & ATTR_SIZE))  		av |= FILE__OPEN;  	return dentry_has_perm(cred, dentry, av); diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h index b8c53723e09..df2de54a958 100644 --- a/security/selinux/include/classmap.h +++ b/security/selinux/include/classmap.h @@ -145,7 +145,9 @@ struct security_class_mapping secclass_map[] = {  	    "node_bind", "name_connect", NULL } },  	{ "memprotect", { "mmap_zero", NULL } },  	{ "peer", { "recv", NULL } }, -	{ "capability2", { "mac_override", "mac_admin", "syslog", NULL } }, +	{ "capability2", +	  { "mac_override", "mac_admin", "syslog", "wake_alarm", "block_suspend", +	    NULL } },  	{ "kernel_service", { "use_as_override", "create_files_as", NULL } },  	{ "tun_socket",  	  { COMMON_SOCK_PERMS, NULL } }, diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index dde2005407a..6d3885165d1 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h @@ -221,7 +221,7 @@ extern void selinux_status_update_policyload(int seqno);  extern void selinux_complete_init(void);  extern int selinux_disable(void);  extern void exit_sel_fs(void); -extern struct dentry *selinux_null; +extern struct path selinux_null;  extern struct vfsmount *selinuxfs_mount;  extern void selnl_notify_setenforce(int val);  extern void selnl_notify_policyload(u32 seqno); diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 3ad29025128..298e695d682 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c @@ -1297,7 +1297,7 @@ out:  #define NULL_FILE_NAME "null" -struct dentry *selinux_null; +struct path selinux_null;  static ssize_t sel_read_avc_cache_threshold(struct file *filp, char __user *buf,  					    size_t count, loff_t *ppos) @@ -1838,7 +1838,7 @@ static int sel_fill_super(struct super_block *sb, void *data, int silent)  	init_special_inode(inode, S_IFCHR | S_IRUGO | S_IWUGO, MKDEV(MEM_MAJOR, 3));  	d_add(dentry, inode); -	selinux_null = dentry; +	selinux_null.dentry = dentry;  	dentry = sel_make_dir(sb->s_root, "avc", &sel_last_ino);  	if (IS_ERR(dentry)) { @@ -1912,7 +1912,7 @@ static int __init init_sel_fs(void)  		return err;  	} -	selinuxfs_mount = kern_mount(&sel_fs_type); +	selinux_null.mnt = selinuxfs_mount = kern_mount(&sel_fs_type);  	if (IS_ERR(selinuxfs_mount)) {  		printk(KERN_ERR "selinuxfs:  could not mount!\n");  		err = PTR_ERR(selinuxfs_mount);  |