Commit 41d600274fbf ("extcon: int3496: process id-pin first so that we start with the right status") starts the work on the workqueue before registration to make sure we've a valid cable state directly after registration. But that commit moves the queuing of the work to before we even alloc the extcon, causing a NULL pointer deref in the worker. This commit moves the queuing of the work to after we alloc the extcon, fixing the NULL pointer deref. Fixes: 41d600274fbf ("extcon: int3496: process id-pin first ...") Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> --- drivers/extcon/extcon-intel-int3496.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/extcon/extcon-intel-int3496.c b/drivers/extcon/extcon-intel-int3496.c index b23ee9d993a3..673bb26a9a2a 100644 --- a/drivers/extcon/extcon-intel-int3496.c +++ b/drivers/extcon/extcon-intel-int3496.c @@ -131,15 +131,15 @@ static int int3496_probe(struct platform_device *pdev) if (IS_ERR(data->gpio_usb_mux)) dev_info(dev, "can't request USB MUX GPIO\n"); + data->edev = devm_extcon_dev_allocate(dev, int3496_cable); + if (IS_ERR(data->edev)) + return -ENOMEM; + /* process id-pin first so that we start with the right status */ queue_delayed_work(system_wq, &data->work, 0); flush_delayed_work(&data->work); /* register extcon device */ - data->edev = devm_extcon_dev_allocate(dev, int3496_cable); - if (IS_ERR(data->edev)) - return -ENOMEM; - ret = devm_extcon_dev_register(dev, data->edev); if (ret < 0) { dev_err(dev, "can't register extcon device: %d\n", ret); -- 2.14.3