Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

spi: spi-fsl-lpspi: fix watermark truncation caused by type cast

't->len' is an unsigned integer, while 'watermark' and 'txfifosize' are
u8. Using min_t with typeof(watermark) forces both values to be cast to
u8, which truncates len when it exceeds 255. For example, len = 4096
becomes 0 after casting, resulting in an incorrect watermark value.

Use a wider type in min_t to avoid truncation and ensure the correct
minimum value is applied.

Fixes: a750050349ea ("spi: spi-fsl-lpspi: use min_t() to improve code")
Signed-off-by: Carlos Song <carlos.song@nxp.com>
Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
Link: https://patch.msgid.link/20251117030355.1359081-1-carlos.song@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Carlos Song and committed by
Mark Brown
9f0c21ba 295fe840

+7 -1
+7 -1
drivers/spi/spi-fsl-lpspi.c
··· 486 486 fsl_lpspi->tx = fsl_lpspi_buf_tx_u32; 487 487 } 488 488 489 - fsl_lpspi->watermark = min_t(typeof(fsl_lpspi->watermark), 489 + /* 490 + * t->len is 'unsigned' and txfifosize and watermrk is 'u8', force 491 + * type cast is inevitable. When len > 255, len will be truncated in min_t(), 492 + * it caused wrong watermark set. 'unsigned int' is as the designated type 493 + * for min_t() to avoid truncation. 494 + */ 495 + fsl_lpspi->watermark = min_t(unsigned int, 490 496 fsl_lpspi->txfifosize, 491 497 t->len); 492 498