patch "iio:buffer: make length types match kfifo types" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio:buffer: make length types match kfifo types
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
c043ec1ca5baae63726aae32abbe003192bc6eecMon Sep 17 00:00:00 2001
From: Martin Kelly <[email protected]>
Date: Mon, 26 Mar 2018 14:27:51 -0700
Subject: iio:buffer: make length types match kfifo types
Currently, we use int for buffer length and bytes_per_datum. However, kfifo uses unsigned int for length and size_t for element size. We need to make sure these matches or we will have bugs related to overflow (in the range between INT_MAX and UINT_MAX for length, for example).
In addition, set_bytes_per_datum uses size_t while bytes_per_datum is an int, which would cause bugs for large values of bytes_per_datum.
Change buffer length to use unsigned int and bytes_per_datum to use size_t.
--- drivers/iio/buffer/industrialio-buffer-dma.c | 2 +- drivers/iio/buffer/kfifo_buf.c | 4 ++-- include/linux/iio/buffer_impl.h | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-)
drivers/iio/buffer/industrialio-buffer-dma.c +1 -1
@@ -587,7 +587,7 @@ EXPORT_SYMBOL_GPL(iio_dma_buffer_set_bytes_per_datum);* Should be used as the set_length callback for iio_buffer_access_ops * struct for DMA buffers. */ -int iio_dma_buffer_set_length (struct iio_buffer *buffer,int length) +int iio_dma_buffer_set_length (struct iio_buffer *buffer,unsigned int length) {/* Avoid an invalid state */ if (length <2 )
drivers/iio/buffer/kfifo_buf.c +2 -2
@@ -22,7 +22,7 @@ struct iio_kfifo {#define iio_to_kfifo (r) container_of(r, struct iio_kfifo, buffer)static inline int __iio_allocate_kfifo (struct iio_kfifo *buf, -int bytes_per_datum,int length) +size_t bytes_per_datum,unsigned int length) {if ((length ==0 ) || (bytes_per_datum ==0 ))return -EINVAL ;
@@ -67,7 +67,7 @@ static int iio_set_bytes_per_datum_kfifo(struct iio_buffer *r, size_t bpd)return 0 ; } -static int iio_set_length_kfifo (struct iio_buffer *r,int length) +static int iio_set_length_kfifo (struct iio_buffer *r,unsigned int length) {/* Avoid an invalid state */ if (length <2 )
include/linux/iio/buffer_impl.h +3 -3
@@ -53,7 +53,7 @@ struct iio_buffer_access_funcs {int (*request_update)(struct iio_buffer *buffer);int (*set_bytes_per_datum)(struct iio_buffer *buffer,size_t bpd); -int (*set_length)(struct iio_buffer *buffer,int length); +int (*set_length)(struct iio_buffer *buffer,unsigned int length);int (*enable)(struct iio_buffer *buffer,struct iio_dev *indio_dev);int (*disable)(struct iio_buffer *buffer,struct iio_dev *indio_dev);
@@ -72,10 +72,10 @@ struct iio_buffer_access_funcs {*/ struct iio_buffer {/** @length: Number of datums in buffer. */ -int length; +unsigned int length;/** @bytes_per_datum: Size of individual datum including timestamp. */ -int bytes_per_datum; +size_t bytes_per_datum;/** * @access: Buffer access functions associated with the
Signature · 1 line
2.17.0