sysfs: Use only return value from is_visible for the file mode
Up to now, is_visible can only be used to either remove visibility of a file entirely or to add permissions, but not to reduce permissions. This makes it impossible, for example, to use DEVICE_ATTR_RW to define file attributes and reduce permissions to read-only. This behavior is undesirable and unnecessarily complicates code which needs to reduce permissions; instead of just returning the desired permissions, it has to ensure that the permissions in the attribute variable declaration only reflect the minimal permissions ever needed. Change semantics of is_visible to only use the permissions returned from it instead of oring the returned value with the hard-coded permissions. Signed-off-by: Guenter Roeck <linux@roeck-us.net> Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
					parent
					
						
							
								bc465aa9d0
							
						
					
				
			
			
				commit
				
					
						da4759c73b
					
				
			
		
					 1 changed files with 2 additions and 3 deletions
				
			
		|  | @ -41,7 +41,7 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj, | |||
| 
 | ||||
| 	if (grp->attrs) { | ||||
| 		for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) { | ||||
| 			umode_t mode = 0; | ||||
| 			umode_t mode = (*attr)->mode; | ||||
| 
 | ||||
| 			/*
 | ||||
| 			 * In update mode, we're changing the permissions or | ||||
|  | @ -56,8 +56,7 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj, | |||
| 					continue; | ||||
| 			} | ||||
| 			error = sysfs_add_file_mode_ns(parent, *attr, false, | ||||
| 						       (*attr)->mode | mode, | ||||
| 						       NULL); | ||||
| 						       mode, NULL); | ||||
| 			if (unlikely(error)) | ||||
| 				break; | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guenter Roeck
				Guenter Roeck