| From 69d429b6f8655ae37c6a0bbc3e63427d4ef4c79b Mon Sep 17 00:00:00 2001 |
| From: Kangjie Lu <kjlu@umn.edu> |
| Date: Thu, 14 Mar 2019 00:24:02 -0500 |
| Subject: HID: logitech: check the return value of |
| create_singlethread_workqueue |
| |
| [ Upstream commit 6c44b15e1c9076d925d5236ddadf1318b0a25ce2 ] |
| |
| create_singlethread_workqueue may fail and return NULL. The fix checks if it is |
| NULL to avoid NULL pointer dereference. Also, the fix moves the call of |
| create_singlethread_workqueue earlier to avoid resource-release issues. |
| |
| Signed-off-by: Kangjie Lu <kjlu@umn.edu> |
| Signed-off-by: Jiri Kosina <jkosina@suse.cz> |
| Signed-off-by: Sasha Levin (Microsoft) <sashal@kernel.org> |
| --- |
| drivers/hid/hid-logitech-hidpp.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c |
| index f040c8a7f9a9..199cc256e9d9 100644 |
| --- a/drivers/hid/hid-logitech-hidpp.c |
| +++ b/drivers/hid/hid-logitech-hidpp.c |
| @@ -2111,6 +2111,13 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index) |
| kfree(data); |
| return -ENOMEM; |
| } |
| + data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue"); |
| + if (!data->wq) { |
| + kfree(data->effect_ids); |
| + kfree(data); |
| + return -ENOMEM; |
| + } |
| + |
| data->hidpp = hidpp; |
| data->feature_index = feature_index; |
| data->version = version; |
| @@ -2155,7 +2162,6 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index) |
| /* ignore boost value at response.fap.params[2] */ |
| |
| /* init the hardware command queue */ |
| - data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue"); |
| atomic_set(&data->workqueue_size, 0); |
| |
| /* initialize with zero autocenter to get wheel in usable state */ |
| -- |
| 2.20.1 |
| |