lkml.org 
[lkml]   [2014]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] spi: core: Validate lenght of the transfers in message
    Date
    From: "Ivan T. Ivanov" <iivanov@mm-sol.com>

    SPI transfer lenght should be a power-of-two multiple
    of eight bits.

    Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com>
    ---
    drivers/spi/spi.c | 17 +++++++++++++++++
    1 file changed, 17 insertions(+)

    diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
    index 23756b0..474c0b0 100644
    --- a/drivers/spi/spi.c
    +++ b/drivers/spi/spi.c
    @@ -1619,6 +1619,7 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)
    {
    struct spi_master *master = spi->master;
    struct spi_transfer *xfer;
    + int w_size, n_words;

    if (list_empty(&message->transfers))
    return -EINVAL;
    @@ -1670,6 +1671,22 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)
    return -EINVAL;
    }

    + /*
    + * Word size of the SPI transfer should be a power-of-two
    + * multiple of eight bits,
    + */
    + if (xfer->bits_per_word <= 8)
    + w_size = 1;
    + else if (xfer->bits_per_word <= 16)
    + w_size = 2;
    + else
    + w_size = 4;
    +
    + n_words = xfer->len / w_size;
    + /* No partial transfers accepted */
    + if (!n_words || xfer->len & (w_size - 1))
    + return -EINVAL;
    +
    if (xfer->speed_hz && master->min_speed_hz &&
    xfer->speed_hz < master->min_speed_hz)
    return -EINVAL;
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2014-02-13 16:21    [W:2.668 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site