mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
iio: adc: ti-adc128s052: validate SPI match data
SPI driver_override allows a device to bind to this driver without matching either the firmware tables or SPI device ID table. In that case, spi_get_device_match_data() returns NULL. adc128_probe() also obtains the IIO device name by dereferencing the result of spi_get_device_id(), which is NULL on the same override path. The probe can therefore crash before it reaches the match data access. Commit572a008526("iio: dac: ad5686: missing NULL check on match data") fixed the same driver_override issue in another SPI driver. Reject devices without match data and use the always available SPI modalias for the IIO device name. Fixes:d5f0da0c69("iio: adc: ti-adc128s052: Switch to use spi_get_device_match_data()") Cc: stable@vger.kernel.org Signed-off-by: Jiale Yao <yaojiale02@163.com> Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
This commit is contained in:
parent
d3410a48d5
commit
4ac257f2fd
|
|
@ -195,12 +195,14 @@ static int adc128_probe(struct spi_device *spi)
|
|||
adc = iio_priv(indio_dev);
|
||||
adc->spi = spi;
|
||||
|
||||
indio_dev->name = spi_get_device_id(spi)->name;
|
||||
config = spi_get_device_match_data(spi);
|
||||
if (!config)
|
||||
return -ENODATA;
|
||||
|
||||
indio_dev->name = spi->modalias;
|
||||
indio_dev->modes = INDIO_DIRECT_MODE;
|
||||
indio_dev->info = &adc128_info;
|
||||
|
||||
config = spi_get_device_match_data(spi);
|
||||
|
||||
indio_dev->channels = config->channels;
|
||||
indio_dev->num_channels = config->num_channels;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user