From: Jonathan Cameron <jic23@jic23.retrosnub.co.uk>
To: Martin Kelly <mkelly@xevo.com>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 1/2] iio:buffer: make length types match kfifo types
Date: Fri, 30 Mar 2018 11:18:31 +0100 [thread overview]
Message-ID: <20180330111831.2012e77d@archlinux> (raw)
In-Reply-To: <20180330111042.701d260e@archlinux>
On Fri, 30 Mar 2018 11:10:42 +0100
Jonathan Cameron <jic23@kernel.org> wrote:
> On Mon, 26 Mar 2018 14:27:51 -0700
> Martin Kelly <mkelly@xevo.com> wrote:
>
> > 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.
> >
> > Signed-off-by: Martin Kelly <mkelly@xevo.com>
> Good bit of cleanup.
>
> I'm fine to take these but I'm not going to rush them in as fixes
> for the obvious reason that it's pretty insane to have a buffer
> of anywhere near the sizes where this is going to go wrong.
>
> Applied to the togreg branch of iio.git and pushed out as testing
> for the autobuilders to play with them.
Actually I changed my mind on this after reading the second patch.
Both added to the fixes-togreg branch of iio.git and marked for
stable. Still bonkers sized buffers, but the results are nasty
enough to make it sensible to deal with it.
So still not that urgent (which is handy given where we are in the
cycle) but nice to clean up.
Jonathan
>
> Thanks,
>
> Jonathan
>
> > ---
> > 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(-)
> >
> > diff --git a/drivers/iio/buffer/industrialio-buffer-dma.c b/drivers/iio/buffer/industrialio-buffer-dma.c
> > index 05e0c353e089..b32bf57910ca 100644
> > --- a/drivers/iio/buffer/industrialio-buffer-dma.c
> > +++ b/drivers/iio/buffer/industrialio-buffer-dma.c
> > @@ -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)
> > diff --git a/drivers/iio/buffer/kfifo_buf.c b/drivers/iio/buffer/kfifo_buf.c
> > index 047fe757ab97..ac622edf2486 100644
> > --- a/drivers/iio/buffer/kfifo_buf.c
> > +++ b/drivers/iio/buffer/kfifo_buf.c
> > @@ -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)
> > diff --git a/include/linux/iio/buffer_impl.h b/include/linux/iio/buffer_impl.h
> > index b9e22b7e2f28..d1171db23742 100644
> > --- a/include/linux/iio/buffer_impl.h
> > +++ b/include/linux/iio/buffer_impl.h
> > @@ -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
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-iio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2018-03-30 10:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-26 21:27 [PATCH 1/2] iio:buffer: make length types match kfifo types Martin Kelly
2018-03-26 21:27 ` [PATCH 2/2] iio:kfifo_buf: check for uint overflow Martin Kelly
2018-03-30 10:20 ` Jonathan Cameron
2018-04-02 16:53 ` Martin Kelly
2018-03-30 10:10 ` [PATCH 1/2] iio:buffer: make length types match kfifo types Jonathan Cameron
2018-03-30 10:18 ` Jonathan Cameron [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180330111831.2012e77d@archlinux \
--to=jic23@jic23.retrosnub.co.uk \
--cc=linux-iio@vger.kernel.org \
--cc=mkelly@xevo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).