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) { | 	if (grp->attrs) { | ||||||
| 		for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) { | 		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 | 			 * 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; | 					continue; | ||||||
| 			} | 			} | ||||||
| 			error = sysfs_add_file_mode_ns(parent, *attr, false, | 			error = sysfs_add_file_mode_ns(parent, *attr, false, | ||||||
| 						       (*attr)->mode | mode, | 						       mode, NULL); | ||||||
| 						       NULL); |  | ||||||
| 			if (unlikely(error)) | 			if (unlikely(error)) | ||||||
| 				break; | 				break; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guenter Roeck
				Guenter Roeck