sysfs: Support is_visible() on binary attributes
According to the sysfs header file:
"The returned value will replace static permissions defined in
struct attribute or struct bin_attribute."
but this isn't the case, as is_visible is only called on struct attribute
only. This patch introduces a new is_bin_visible() function to implement
the same functionality for binary attributes, and updates documentation
accordingly.
Note that to keep functionality and code similar to that of normal
attributes, the mode is now checked as well to ensure it contains only
read/write permissions or SYSFS_PREALLOC.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Emilio López <emilio.lopez@collabora.co.uk>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
committed by
Olof Johansson
parent
f14ae099bd
commit
7f5028cf61
+15
-2
@@ -73,13 +73,26 @@ static int create_files(struct kernfs_node *parent, struct kobject *kobj,
|
||||
}
|
||||
|
||||
if (grp->bin_attrs) {
|
||||
for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++) {
|
||||
for (i = 0, bin_attr = grp->bin_attrs; *bin_attr; i++, bin_attr++) {
|
||||
umode_t mode = (*bin_attr)->attr.mode;
|
||||
|
||||
if (update)
|
||||
kernfs_remove_by_name(parent,
|
||||
(*bin_attr)->attr.name);
|
||||
if (grp->is_bin_visible) {
|
||||
mode = grp->is_bin_visible(kobj, *bin_attr, i);
|
||||
if (!mode)
|
||||
continue;
|
||||
}
|
||||
|
||||
WARN(mode & ~(SYSFS_PREALLOC | 0664),
|
||||
"Attribute %s: Invalid permissions 0%o\n",
|
||||
(*bin_attr)->attr.name, mode);
|
||||
|
||||
mode &= SYSFS_PREALLOC | 0664;
|
||||
error = sysfs_add_file_mode_ns(parent,
|
||||
&(*bin_attr)->attr, true,
|
||||
(*bin_attr)->attr.mode, NULL);
|
||||
mode, NULL);
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user