mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
staging: iio: adc: ad7816: Protect sysfs attributes with mutex
The sysfs store functions modify driver state that is critical during
SPI transactions. ad7816_store_mode toggles hardware GPIO pins, while
ad7816_store_channel updates the internal software state
(chip->channel_id).
If these are modified concurrently by userspace while an SPI transfer
is in progress, it could corrupt the hardware transaction or cause the
driver to communicate with the wrong channel.
Add the existing chip->lock guard to these functions to serialize
access and prevent these race conditions.
Fixes: 7924425db0 ("staging: iio: adc: new driver for AD7816 devices")
Suggested-by: Joshua Crofts <joshua.crofts1@gmail.com>
Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com>
Signed-off-by: Abdelnasser Hussein <abdelnasserhussein11@gmail.com>
Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
This commit is contained in:
parent
696bd6909e
commit
b961876446
|
|
@ -143,6 +143,8 @@ static ssize_t ad7816_store_mode(struct device *dev,
|
|||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct ad7816_chip_info *chip = iio_priv(indio_dev);
|
||||
|
||||
guard(mutex)(&chip->lock);
|
||||
|
||||
if (strcmp(buf, "full") == 0) {
|
||||
gpiod_set_value(chip->rdwr_pin, 1);
|
||||
chip->mode = AD7816_FULL;
|
||||
|
|
@ -207,6 +209,8 @@ static ssize_t ad7816_store_channel(struct device *dev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
guard(mutex)(&chip->lock);
|
||||
|
||||
chip->channel_id = data;
|
||||
|
||||
return len;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user