Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: buffer: Make length attribute read only for buffers without set_length

If a buffer implementation does not implement the set_length() callback the
length will be static and can not be changed by userspace. Mark the length
attribute as a read only property in this case so userspace is aware of this
rather than just silently accepting any length value.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>

authored by

Lars-Peter Clausen and committed by
Jonathan Cameron
8d92db28 08e7e0ad

+7 -3
+7 -3
drivers/iio/industrialio-buffer.c
··· 418 418 if (iio_buffer_is_active(indio_dev->buffer)) { 419 419 ret = -EBUSY; 420 420 } else { 421 - if (buffer->access->set_length) 422 - buffer->access->set_length(buffer, val); 421 + buffer->access->set_length(buffer, val); 423 422 ret = 0; 424 423 } 425 424 mutex_unlock(&indio_dev->mlock); ··· 759 760 760 761 static DEVICE_ATTR(length, S_IRUGO | S_IWUSR, iio_buffer_read_length, 761 762 iio_buffer_write_length); 763 + static struct device_attribute dev_attr_length_ro = __ATTR(length, 764 + S_IRUGO, iio_buffer_read_length, NULL); 762 765 static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, 763 766 iio_buffer_show_enable, iio_buffer_store_enable); 764 767 ··· 787 786 if (!buffer->buffer_group.attrs) 788 787 return -ENOMEM; 789 788 790 - buffer->buffer_group.attrs[0] = &dev_attr_length.attr; 789 + if (buffer->access->set_length) 790 + buffer->buffer_group.attrs[0] = &dev_attr_length.attr; 791 + else 792 + buffer->buffer_group.attrs[0] = &dev_attr_length_ro.attr; 791 793 buffer->buffer_group.attrs[1] = &dev_attr_enable.attr; 792 794 if (buffer->attrs) 793 795 memcpy(&buffer->buffer_group.attrs[2], buffer->attrs,