diff options
author | Kim, Milo <Milo.Kim@ti.com> | 2012-09-17 10:44:00 +0200 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2012-09-17 20:16:42 +0200 |
commit | b2b79ffa40d7ae40115631660ff8b6da3cf989b6 (patch) | |
tree | 89471ce2b1f1d5fb24dd55f4d91fb64058818348 /drivers | |
parent | iio: inkern: allocate zeroed memory (diff) | |
download | linux-b2b79ffa40d7ae40115631660ff8b6da3cf989b6.tar.xz linux-b2b79ffa40d7ae40115631660ff8b6da3cf989b6.zip |
iio: inkern: add error case in iio_channel_get()
The datasheet name is defined in the IIO driver.
On the other hand, the adc_channel_label is configured in
the platform side.
If the datasheet name is not matched with any adc_channel_label,
the iio_channel_get() should be returned as error for preventing
invalid channel data access.
This can be handled either way.
(a) checking null data when using it : in the xxx_read_raw()
or
(b) error returns when the channel is requested : this patch
The IIO consumer can't use the channel with invalid channel spec.
Therefore case (b) is more reasonable.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/iio/inkern.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index 028c657f8da3..d539e1e297ba 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -136,12 +136,21 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name) channel->indio_dev = c->indio_dev; - if (c->map->adc_channel_label) + if (c->map->adc_channel_label) { channel->channel = iio_chan_spec_from_name(channel->indio_dev, c->map->adc_channel_label); + if (channel->channel == NULL) + goto error_no_chan; + } + return channel; + +error_no_chan: + iio_device_put(c->indio_dev); + kfree(channel); + return ERR_PTR(-EINVAL); } EXPORT_SYMBOL_GPL(iio_channel_get); |