summaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorNicolas Saenz Julienne <nsaenzjulienne@suse.de>2021-02-11 19:08:20 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-03-04 11:38:07 +0100
commit86f5b0936975e7b6ac37e0f8073e954595fcc688 (patch)
treeb229f5abdc2c2af0a59b68dfbac2fd120c095982 /drivers/spi
parent231d8c46b16dcd7cd8ea2212a5b2cee960b7213d (diff)
downloadlinux-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.c2
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: