All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zefan Li <lizefan@huawei.com>
To: Ian Abbott <abbotti@mev.co.uk>
Cc: <stable@vger.kernel.org>
Subject: Re: [PATCH 2.6.22 to 4.0] spi: spidev: fix possible arithmetic overflow for multi-transfer message
Date: Mon, 15 Jun 2015 11:36:33 +0800	[thread overview]
Message-ID: <557E4841.6080708@huawei.com> (raw)
In-Reply-To: <1429286534-17556-1-git-send-email-abbotti@mev.co.uk>

On 2015/4/18 0:02, Ian Abbott wrote:
> commit f20fbaad7620 ("spi: spidev: fix possible arithmetic overflow for multi-transfer message")
> 

Queued up for 3.4. Thanks!

> `spidev_message()` sums the lengths of the individual SPI transfers to
> determine the overall SPI message length.  It restricts the total
> length, returning an error if too long, but it does not check for
> arithmetic overflow.  For example, if the SPI message consisted of two
> transfers and the first has a length of 10 and the second has a length
> of (__u32)(-1), the total length would be seen as 9, even though the
> second transfer is actually very long.  If the second transfer specifies
> a null `rx_buf` and a non-null `tx_buf`, the `copy_from_user()` could
> overrun the spidev's pre-allocated tx buffer before it reaches an
> invalid user memory address.  Fix it by checking that neither the total
> nor the individual transfer lengths exceed the maximum allowed value.
> 
> Thanks to Dan Carpenter for reporting the potential integer overflow.
> 
> Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
> ---
> Note: original commit compares the lengths to INT_MAX instead of bufsiz
> due to changes in earlier commits.
> ---
>  drivers/spi/spidev.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
> index 4eb7a98..7bf5186 100644
> --- a/drivers/spi/spidev.c
> +++ b/drivers/spi/spidev.c
> @@ -245,7 +245,10 @@ static int spidev_message(struct spidev_data *spidev,
>  		k_tmp->len = u_tmp->len;
>  
>  		total += k_tmp->len;
> -		if (total > bufsiz) {
> +		/* Check total length of transfers.  Also check each
> +		 * transfer length to avoid arithmetic overflow.
> +		 */
> +		if (total > bufsiz || k_tmp->len > bufsiz) {
>  			status = -EMSGSIZE;
>  			goto done;
>  		}
> 


      parent reply	other threads:[~2015-06-15  3:36 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1429286534-17556-1-git-send-email-abbotti@mev.co.uk>
2015-05-04 22:55 ` [PATCH 2.6.22 to 4.0] spi: spidev: fix possible arithmetic overflow for multi-transfer message Ben Hutchings
2015-06-15  3:36 ` Zefan Li [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=557E4841.6080708@huawei.com \
    --to=lizefan@huawei.com \
    --cc=abbotti@mev.co.uk \
    --cc=stable@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.