[dm-devel] [PATCH] multipathd: avoid unnecessary path read-only reloads

Martin Wilck martin.wilck at suse.com
Wed Dec 15 07:34:52 UTC 2021


On Tue, 2021-12-14 at 18:49 -0600, Benjamin Marzinski wrote:
> On Fri, Dec 03, 2021 at 08:25:00AM +0000, Martin Wilck wrote:
> > On Thu, 2021-11-18 at 16:47 -0600, Benjamin Marzinski wrote:
> > > +int
> > > +sysfs_get_ro (struct path *pp)
> > > +{
> > > +       int ro;
> > > +       char buff[3]; /* Either "0\n\0" or "1\n\0" */
> > > +
> > > +       if (!pp->udev)
> > > +               return -1;
> > > +
> > > +       if (sysfs_attr_get_value(pp->udev, "ro", buff,
> > > sizeof(buff))
> > > <= 0) {
> > > +               condlog(3, "%s: Cannot read ro attribute in
> > > sysfs",
> > > pp->dev);
> > > +               return -1;
> > > +       }
> > > +
> > > +       if (sscanf(buff, "%d\n", &ro) != 1 || ro < 0 || ro > 1) {
> > 
> > This is ok, but for self-evidently correct code in multipath-tools,
> > it'd be better to read just 2 bytes and set buff[2] = '\0'
> > explicitly.
> > I haven't checked, but coverity might stumble on this.
> 
> Actually this is just the way sysfs_attr_get_value() works. You have
> to
> provide a larger buffer than you will read (in this case, ro will
> only
> ever have two bytes), otherwise it will think that it overflowed.
> sysfs_attr_get_value() also does the NULL termination itself.
> 

Well, fine then. It's a nit anyway.

Martin





More information about the dm-devel mailing list