summaryrefslogtreecommitdiff
path: root/drivers/iio
diff options
context:
space:
mode:
authorLouis Li <louli@nvidia.com>2014-04-21 14:10:37 +0800
committerMandar Padmawar <mpadmawar@nvidia.com>2014-05-14 07:18:35 -0700
commitc644396e53d0100431ea5e4e06528d967581f812 (patch)
tree9fa0e10467aaf72899ed5152def23d47acfab251 /drivers/iio
parenta018da2780d79e64f036573c4de02cffa4ce6207 (diff)
iio: core: add protection to avoid race condition
Kernel panic at iio_read_channel_info during boot stress. It is supposed that iio_dev has been released while sensor service is reading sysfile. So add a protection here to avoid race condition. Bug 1501090 Change-Id: I24da6245f4473fdcc2e8e7bf9673fbd25c350820 Reviewed-on: http://git-master/r/398726 (cherry picked from commit 75155b5e80369feafc612a8c0f1ec44ed84dee10) Signed-off-by: Louis Li <louli@nvidia.com> Reviewed-on: http://git-master/r/408580 GVS: Gerrit_Virtual_Submit Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/industrialio-core.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
index c709b59b83cb..0b7940cdcc8d 100644
--- a/drivers/iio/industrialio-core.c
+++ b/drivers/iio/industrialio-core.c
@@ -370,10 +370,13 @@ static ssize_t iio_read_channel_info(struct device *dev,
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
unsigned long long tmp;
- int val, val2;
+ int ret, val, val2;
bool scale_db = false;
- int ret = indio_dev->info->read_raw(indio_dev, this_attr->c,
- &val, &val2, this_attr->address);
+ if (likely(indio_dev && indio_dev->info && indio_dev->info->read_raw))
+ ret = indio_dev->info->read_raw(indio_dev, this_attr->c,
+ &val, &val2, this_attr->address);
+ else
+ ret = -ENODEV;
if (ret < 0)
return ret;