Re: [PATCH] sysfs: add BIN_ATTR_WO() macro

From: Greg Kroah-Hartman
Date: Tue Oct 01 2019 - 14:16:51 EST


On Tue, Oct 01, 2019 at 02:08:53PM -0400, Nayna wrote:
> Hi Greg,
>
>
> On 08/26/2019 11:01 AM, Greg Kroah-Hartman wrote:
> > This variant was missing from sysfs.h, I guess no one noticed it before.
> >
> > Turns out the powerpc secure variable code can use it, so add it to the
> > tree for it, and potentially others to take advantage of, instead of
> > open-coding it.
> >
> > Reported-by: Nayna Jain <nayna@xxxxxxxxxxxxx>
> > Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> > ---
> >
> > I'll queue this up to my tree for 5.4-rc1, but if you want to take this
> > in your tree earlier, feel free to do so.
> >
> > include/linux/sysfs.h | 9 +++++++++
> > 1 file changed, 9 insertions(+)
> >
> > diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
> > index 965236795750..5420817ed317 100644
> > --- a/include/linux/sysfs.h
> > +++ b/include/linux/sysfs.h
> > @@ -196,6 +196,12 @@ struct bin_attribute {
> > .size = _size, \
> > }
> > +#define __BIN_ATTR_WO(_name) { \
> > + .attr = { .name = __stringify(_name), .mode = 0200 }, \
> > + .store = _name##_store, \
> > + .size = _size, \
> > +}
> > +
> > #define __BIN_ATTR_RW(_name, _size) \
> > __BIN_ATTR(_name, 0644, _name##_read, _name##_write, _size)
> > @@ -208,6 +214,9 @@ struct bin_attribute bin_attr_##_name = __BIN_ATTR(_name, _mode, _read, \
> > #define BIN_ATTR_RO(_name, _size) \
> > struct bin_attribute bin_attr_##_name = __BIN_ATTR_RO(_name, _size)
> > +#define BIN_ATTR_WO(_name, _size) \
> > +struct bin_attribute bin_attr_##_name = __BIN_ATTR_WO(_name, _size)
> > +
> > #define BIN_ATTR_RW(_name, _size) \
> > struct bin_attribute bin_attr_##_name = __BIN_ATTR_RW(_name, _size)
>
> I am sorry. I didn't notice it via inspection but there is a bug in this
> macro. When I actually try using it, compilation fails. Here's a likely
> patch:
>
> diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
> index 5420817ed317..fa7ee503fb76 100644
> --- a/include/linux/sysfs.h
> +++ b/include/linux/sysfs.h
> @@ -196,9 +196,9 @@ struct bin_attribute {
> .size = _size, \
> }
> -#define __BIN_ATTR_WO(_name) { \
> +#define __BIN_ATTR_WO(_name, _size) { \
> .attr = { .name = __stringify(_name), .mode = 0200 }, \
> - .store = _name##_store, \
> + .write = _name##_write, \
> .size = _size, \
> }
>

Heh, good catch. Can you send a real patch for this that I can apply to
give you the proper credit for finding and fixing this?

thanks,

greg k-h