patch "iio: adc: nxp-sar-adc: fix division by zero in write_raw" added to char-misc-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
iio: adc: nxp-sar-adc: fix division by zero in write_raw
to my char-misc git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
in the char-misc-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From a9aba21a539c668a66b58eeb08ad3909e5a54c2a Mon Sep 17 00:00:00 2001
From: Antoniu Miclaus <[email protected]>
Date: Wed, 1 Apr 2026 18:29:24 +0300
Subject: iio: adc: nxp-sar-adc: fix division by zero in write_raw
Add a validation check for the sampling frequency value before using it as a divisor. A user writing zero or a negative value to the sampling_frequency sysfs attribute triggers a division by zero in the kernel.
Also prevent unsigned integer underflow when the computed cycle count is smaller than NXP_SAR_ADC_CONV_TIME, which would wrap the u32 inpsamp to a huge value.
--- drivers/iio/adc/nxp-sar-adc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/iio/adc/nxp-sar-adc.c +8 -1
@@ -569,6 +569,9 @@ static int nxp_sar_adc_write_raw(struct iio_dev *indio_dev, struct iio_chan_specswitch (mask) {case IIO_CHAN_INFO_SAMP_FREQ : +if (val <=0 ) +return -EINVAL ; +/* * Configures the sample period duration in terms of the SAR * controller clock. The minimum acceptable value is 8.
@@ -577,7 +580,11 @@ static int nxp_sar_adc_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec* sampling timing which gives us the number of cycles expected. * The value is 8-bit wide, consequently the max value is 0xFF. */ - inpsamp =clk_get_rate (info->clk) / val -NXP_SAR_ADC_CONV_TIME ; + inpsamp =clk_get_rate (info->clk) / val; +if (inpsamp <NXP_SAR_ADC_CONV_TIME ) +return -EINVAL ; + + inpsamp -=NXP_SAR_ADC_CONV_TIME ;nxp_sar_adc_conversion_timing_set (info, inpsamp);return 0 ;
Signature · 1 line
2.54.0