| From 1135d6875d2dbda3f6ec718f3421a6ce4378bd63 Mon Sep 17 00:00:00 2001 |
| From: Linmao Li <lilinmao@kylinos.cn> |
| Date: Wed, 22 Jul 2026 15:48:37 +0800 |
| Subject: iio: chemical: sgp30: Handle IAQ thread creation failure |
| |
| From: Linmao Li <lilinmao@kylinos.cn> |
| |
| commit 1135d6875d2dbda3f6ec718f3421a6ce4378bd63 upstream. |
| |
| kthread_run() can fail and return an error pointer, but sgp_probe() stores |
| it and returns success, so the device is registered without its IAQ thread |
| and sgp_remove() later passes the error pointer to kthread_stop(). Return |
| the error from probe instead. |
| |
| Fixes: ce514124161a ("iio: chemical: sgp30: Support Sensirion SGP30/SGPC3 sensors") |
| Signed-off-by: Linmao Li <lilinmao@kylinos.cn> |
| Reviewed-by: Joshua Crofts <joshua.crofts1@gmail.com> |
| Cc: <Stable@vger.kernel.org> |
| Signed-off-by: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/iio/chemical/sgp30.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/drivers/iio/chemical/sgp30.c |
| +++ b/drivers/iio/chemical/sgp30.c |
| @@ -548,6 +548,9 @@ static int sgp_probe(struct i2c_client * |
| |
| data->iaq_thread = kthread_run(sgp_iaq_threadfn, data, |
| "%s-iaq", data->client->name); |
| + if (IS_ERR(data->iaq_thread)) |
| + return dev_err_probe(dev, PTR_ERR(data->iaq_thread), |
| + "failed to start IAQ thread\n"); |
| |
| return 0; |
| } |