spi: Add check for 8-bit transfer with 8 IO mode support

The current SPI framework does not verify if the SPI device supports
8 IO mode when doing an 8-bit transfer. This patch adds a check to
ensure that if the transfer tx_nbits or rx_nbits is 8, the SPI mode must
support 8 IO. If not, an error is returned, preventing undefined behavior.

Fixes: d6a711a898672 ("spi: Fix OCTAL mode support")
Cc: stable@vger.kernel.org
Signed-off-by: Cheng Ming Lin <chengminglin@mxic.com.tw>
Link: https://patch.msgid.link/20250714031023.504752-1-linchengming884@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by Cheng Ming Lin and committed by Mark Brown 71050521 d7b8f8e2

Changed files
+10 -4
drivers
spi
+10 -4
drivers/spi/spi.c
··· 4138 4138 xfer->tx_nbits != SPI_NBITS_OCTAL) 4139 4139 return -EINVAL; 4140 4140 if ((xfer->tx_nbits == SPI_NBITS_DUAL) && 4141 - !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD))) 4141 + !(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD | SPI_TX_OCTAL))) 4142 4142 return -EINVAL; 4143 4143 if ((xfer->tx_nbits == SPI_NBITS_QUAD) && 4144 - !(spi->mode & SPI_TX_QUAD)) 4144 + !(spi->mode & (SPI_TX_QUAD | SPI_TX_OCTAL))) 4145 + return -EINVAL; 4146 + if ((xfer->tx_nbits == SPI_NBITS_OCTAL) && 4147 + !(spi->mode & SPI_TX_OCTAL)) 4145 4148 return -EINVAL; 4146 4149 } 4147 4150 /* Check transfer rx_nbits */ ··· 4157 4154 xfer->rx_nbits != SPI_NBITS_OCTAL) 4158 4155 return -EINVAL; 4159 4156 if ((xfer->rx_nbits == SPI_NBITS_DUAL) && 4160 - !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD))) 4157 + !(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD | SPI_RX_OCTAL))) 4161 4158 return -EINVAL; 4162 4159 if ((xfer->rx_nbits == SPI_NBITS_QUAD) && 4163 - !(spi->mode & SPI_RX_QUAD)) 4160 + !(spi->mode & (SPI_RX_QUAD | SPI_RX_OCTAL))) 4161 + return -EINVAL; 4162 + if ((xfer->rx_nbits == SPI_NBITS_OCTAL) && 4163 + !(spi->mode & SPI_RX_OCTAL)) 4164 4164 return -EINVAL; 4165 4165 } 4166 4166