[PATCH v2 0/5] spi: fix division by zero with a zero transfer speed
shao.mingyin at zte.com.cn
shao.mingyin at zte.com.cn
Tue Nov 10 07:34:50 PST 2026
Five SPI controller drivers compute a clock divider from the transfer
speed without checking that it is non-zero. A SPI device whose
max_speed_hz is zero (a DT node without spi-max-frequency, or a device
created through the spidev sysfs new_device interface without a speed)
therefore reaches the division with speed_hz == 0. The SPI core clamps
such a device to the controller limit only when host->max_speed_hz is
set, and none of these five drivers sets it.
The series is organized by driver and is independent patch-by-patch;
each patch can be applied and reviewed on its own, and taking a subset
is fine:
1/5 spi: sifive: clamp the clock divider to the register range
2/5 spi: bcm63xx-hsspi: fix division by zero for devices without a max speed
3/5 spi: bcmbca-hsspi: fix division by zero for devices without a max speed
4/5 spi: apple: fix division by zero in clock divisor calculation
5/5 spi: atmel: use the maximum divider for an unspecified speed
1/5 and 5/5 program the slowest clock directly when no speed is supplied;
2/5-4/5 clamp the requested rate to 1 Hz. The division does not trap on
the SoCs these drivers run on: depending on the architecture it produces
a bogus divider, a zero quotient or an undefined value, so the patches
remove undefined arithmetic rather than a crash.
Changes in v2:
- 1/5: use the maximum SCKDIV for a zero speed and saturate an excessive
divider instead of masking away the high bits (Mark Brown).
- 5/5: select SCBR=255 directly for a zero speed instead of dividing a
substituted 1 Hz and then failing the range check (Mark Brown).
- 2/5, 3/5 and 4/5: unchanged.
- This series replaces the two standalone v2 patches posted on 10 Nov for
1/5 and 5/5.
Link to v1: https://lore.kernel.org/all/20261106234751020Egf42VCVVlsSC_Msov4HO@zte.com.cn/
Shao Mingyin (5):
spi: sifive: clamp the clock divider to the register range
spi: bcm63xx-hsspi: fix division by zero for devices without a max speed
spi: bcmbca-hsspi: fix division by zero for devices without a max speed
spi: apple: fix division by zero in clock divisor calculation
spi: atmel: use the maximum divider for an unspecified speed
drivers/spi/spi-apple.c | 6 +++++-
drivers/spi/spi-atmel.c | 5 ++++-
drivers/spi/spi-bcm63xx-hsspi.c | 3 +++
drivers/spi/spi-bcmbca-hsspi.c | 3 +++
drivers/spi/spi-sifive.c | 9 ++++++---
5 files changed, 21 insertions(+), 5 deletions(-)
---
base-commit: ddfe51b0a0f5dc9e415cc2c8ad8db17532dd426b
More information about the linux-riscv
mailing list