diff options
author | Nicolas Saenz Julienne <nsaenzjulienne@suse.de> | 2021-02-11 19:08:20 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2021-03-04 11:38:07 +0100 |
commit | 86f5b0936975e7b6ac37e0f8073e954595fcc688 (patch) | |
tree | b229f5abdc2c2af0a59b68dfbac2fd120c095982 /drivers/spi | |
parent | 231d8c46b16dcd7cd8ea2212a5b2cee960b7213d (diff) | |
download | linux-stable-86f5b0936975e7b6ac37e0f8073e954595fcc688.tar.gz linux-stable-86f5b0936975e7b6ac37e0f8073e954595fcc688.tar.bz2 linux-stable-86f5b0936975e7b6ac37e0f8073e954595fcc688.zip |
spi: Skip zero-length transfers in spi_transfer_one_message()
[ Upstream commit b306320322c9cfaa465bc2c7367acf6072b1ac0e ]
With the introduction of 26751de25d25 ("spi: bcm2835: Micro-optimise
FIFO loops") it has become apparent that some users might initiate
zero-length SPI transfers. A fact the micro-optimization omitted, and
which turned out to cause crashes[1].
Instead of changing the micro-optimization itself, use a bigger hammer
and skip zero-length transfers altogether for drivers using the default
transfer_one_message() implementation.
Reported-by: Phil Elwell <phil@raspberrypi.com>
Fixes: 26751de25d25 ("spi: bcm2835: Micro-optimise FIFO loops")
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
[1] https://github.com/raspberrypi/linux/issues/4100
Link: https://lore.kernel.org/r/20210211180820.25757-1-nsaenzjulienne@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 7694e1ae5b0b..4257a2d368f7 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1259,7 +1259,7 @@ static int spi_transfer_one_message(struct spi_controller *ctlr, ptp_read_system_prets(xfer->ptp_sts); } - if (xfer->tx_buf || xfer->rx_buf) { + if ((xfer->tx_buf || xfer->rx_buf) && xfer->len) { reinit_completion(&ctlr->xfer_completion); fallback_pio: |