mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 16:14:13 +08:00
spi: core: Validate length of the transfers in message
SPI transfer length should be multiple of SPI word size, where SPI word size should be power-of-two multiple Signed-off-by: Ivan T. Ivanov <iivanov@mm-sol.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
aec35f4ee6
commit
4d94bd21b3
@ -1617,6 +1617,7 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)
|
|||||||
{
|
{
|
||||||
struct spi_master *master = spi->master;
|
struct spi_master *master = spi->master;
|
||||||
struct spi_transfer *xfer;
|
struct spi_transfer *xfer;
|
||||||
|
int w_size, n_words;
|
||||||
|
|
||||||
if (list_empty(&message->transfers))
|
if (list_empty(&message->transfers))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -1668,6 +1669,22 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SPI transfer length should be multiple of SPI word size
|
||||||
|
* where SPI word size should be power-of-two multiple
|
||||||
|
*/
|
||||||
|
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)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (xfer->speed_hz && master->min_speed_hz &&
|
if (xfer->speed_hz && master->min_speed_hz &&
|
||||||
xfer->speed_hz < master->min_speed_hz)
|
xfer->speed_hz < master->min_speed_hz)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
Loading…
Reference in New Issue
Block a user