[bug report] mei: fix error flow in probe
Dan Carpenter <[email protected]> Wed, 10 Jun 2026 18:22:30 +0300
| Newsgroups | org.kernel.vger.kernel-janitors |
|---|---|
| Message-ID | <[email protected]> |
Hello Alexander Usyskin,
Commit 1ebc180d2b90 ("mei: fix error flow in probe") from Nov 2, 2025
(linux-next), leads to the following Smatch static checker warning:
drivers/misc/mei/platform-vsc.c:384 mei_vsc_probe()
error: potential zalloc NULL dereference: 'mei_dev->cdev'
drivers/misc/mei/platform-vsc.c
334 static int mei_vsc_probe(struct platform_device *pdev)
335 {
336 struct device *dev = &pdev->dev;
337 struct mei_device *mei_dev;
338 struct mei_vsc_hw *hw;
339 struct vsc_tp *tp;
340 int ret;
341
342 tp = *(struct vsc_tp **)dev_get_platdata(dev);
343 if (!tp)
344 return dev_err_probe(dev, -ENODEV, "no platform data\n");
345
346 mei_dev = kzalloc(size_add(sizeof(*mei_dev), sizeof(*hw)), GFP_KERNEL);
347 if (!mei_dev)
348 return -ENOMEM;
349
350 mei_device_init(mei_dev, dev, false, &mei_vsc_hw_ops);
351
352 mei_dev->fw_f_fw_ver_supported = 0;
353 mei_dev->kind = MEI_DEV_KIND_IVSC;
354
355 hw = mei_dev_to_vsc_hw(mei_dev);
356 atomic_set(&hw->write_lock_cnt, 0);
357 hw->tp = tp;
358
359 platform_set_drvdata(pdev, mei_dev);
360
361 vsc_tp_register_event_cb(tp, mei_vsc_event_cb, mei_dev);
362
363 ret = mei_register(mei_dev, dev);
If mei_register() fails to allocate mei_dev->cdev
364 if (ret)
365 goto err;
366
367 ret = mei_start(mei_dev);
368 if (ret) {
369 dev_err_probe(dev, ret, "init hw failed\n");
370 goto err;
371 }
372
373 pm_runtime_enable(mei_dev->parent);
374
375 return 0;
376
377 err:
378 mei_cancel_work(mei_dev);
379
380 vsc_tp_register_event_cb(tp, NULL, NULL);
381
382 mei_disable_interrupts(mei_dev);
383
--> 384 mei_deregister(mei_dev);
Then it leads to a crash here.
385
386 return ret;
387 }
This email is a free service from the Smatch-CI project [smatch.sf.net].
regards,
dan carpenter