diff options
| -rw-r--r-- | fs/sysfs/dir.c | 14 | ||||
| -rw-r--r-- | fs/sysfs/file.c | 3 | 
2 files changed, 14 insertions, 3 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 352d26d98c0..26f370a9b5c 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c @@ -384,6 +384,13 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)  {  	struct sysfs_inode_attrs *ps_iattr; +	if (!!sysfs_ns_type(acxt->parent_sd) != !!sd->s_ns) { +		WARN(1, KERN_WARNING "sysfs: ns %s in '%s' for '%s'\n", +			sysfs_ns_type(acxt->parent_sd)? "required": "invalid", +			acxt->parent_sd->s_name, sd->s_name); +		return -EINVAL; +	} +  	if (sysfs_find_dirent(acxt->parent_sd, sd->s_ns, sd->s_name))  		return -EEXIST; @@ -542,6 +549,13 @@ struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,  {  	struct sysfs_dirent *sd; +	if (!!sysfs_ns_type(parent_sd) != !!ns) { +		WARN(1, KERN_WARNING "sysfs: ns %s in '%s' for '%s'\n", +			sysfs_ns_type(parent_sd)? "required": "invalid", +			parent_sd->s_name, name); +		return NULL; +	} +  	for (sd = parent_sd->s_dir.children; sd; sd = sd->s_sibling) {  		if (sd->s_ns != ns)  			continue; diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 07c1b4ec00d..d4e6080b4b2 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c @@ -466,9 +466,6 @@ void sysfs_notify(struct kobject *k, const char *dir, const char *attr)  	mutex_lock(&sysfs_mutex);  	if (sd && dir) -		/* Only directories are tagged, so no need to pass -		 * a tag explicitly. -		 */  		sd = sysfs_find_dirent(sd, NULL, dir);  	if (sd && attr)  		sd = sysfs_find_dirent(sd, NULL, attr);  |