The reference taken with iio_trigger_get() is only dropped by iio_dev_release() when INDIO_BUFFER_TRIGGERED is set. If iio_triggered_buffer_setup() fails before setting that mode, the reference acquired for indio_dev->trig leaks. Move the iio_trigger_get() after the buffer setup succeeds. Fixes: f1f065d7ac30 ("iio: chemical: ccs811: Add support for data ready trigger") Cc: stable@vger.kernel.org Signed-off-by: Wentao Liang --- drivers/iio/chemical/ccs811.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/iio/chemical/ccs811.c b/drivers/iio/chemical/ccs811.c index 998c9239c4c7..bbc8284316ab 100644 --- a/drivers/iio/chemical/ccs811.c +++ b/drivers/iio/chemical/ccs811.c @@ -503,8 +503,6 @@ static int ccs811_probe(struct i2c_client *client) ret = iio_trigger_register(data->drdy_trig); if (ret) goto err_poweroff; - - indio_dev->trig = iio_trigger_get(data->drdy_trig); } ret = iio_triggered_buffer_setup(indio_dev, NULL, @@ -515,6 +513,9 @@ static int ccs811_probe(struct i2c_client *client) goto err_trigger_unregister; } + if (data->drdy_trig) + indio_dev->trig = iio_trigger_get(data->drdy_trig); + ret = iio_device_register(indio_dev); if (ret < 0) { dev_err(&client->dev, "unable to register iio device\n"); -- 2.34.1