On Mon, Apr 18, 2016 at 09:55:39PM +0200, H. Nikolaus Schaller wrote: > commit 21fb9f0d5e91 ("Input: twl6040-vibra - use system workqueue") > > says that it switches to use the system workqueue but it did neither > > - remove the workqueue struct variable > - replace code to really use the system workqueue > > Instead it calls queue_work() on uninitialized info->workqueue. > > The result is a NULL pointer dereference in vibra_play(). > > Solution: use schedule_work > > Signed-off-by: H. Nikolaus Schaller <hns@xxxxxxxxxxxxx> Applied, thank you. > --- > drivers/input/misc/twl6040-vibra.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c > index 1e9902d..3805129 100644 > --- a/drivers/input/misc/twl6040-vibra.c > +++ b/drivers/input/misc/twl6040-vibra.c > @@ -45,7 +45,6 @@ > struct vibra_info { > struct device *dev; > struct input_dev *input_dev; > - struct workqueue_struct *workqueue; > struct work_struct play_work; > struct mutex mutex; > int irq; > @@ -213,7 +212,7 @@ static int vibra_play(struct input_dev *input, void *data, > info->strong_speed = effect->u.rumble.strong_magnitude; > info->direction = effect->direction < EFFECT_DIR_180_DEG ? 1 : -1; > > - ret = queue_work(info->workqueue, &info->play_work); > + ret = schedule_work(&info->play_work); > if (!ret) { > dev_info(&input->dev, "work is already on queue\n"); > return ret; > -- > 2.7.3 > -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html