tree:   https://chromium.googlesource.com/chromiumos/third_party/kernel 
chromeos-5.4
head:   e8eea4af56bba00e98c042c2863a3b34adb167f3
commit: f4affb3abb52e96172d08b80cfd67bb73817d0ac [88/120] CHROMIUM: drm/evdi: 
Create sysfs link from evdi to its parent device and unlink on detach
config: parisc-randconfig-m031-20210219 (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/gpu/drm/evdi/evdi_drv.c:344 evdi_platform_probe() warn: possible memory 
leak of 'data'

Old smatch warnings:
drivers/gpu/drm/evdi/evdi_drv.c:328 evdi_driver_setup_early() error: 
dereferencing freed memory 'evdi'

vim +/data +344 drivers/gpu/drm/evdi/evdi_drv.c

60d03e018f5eb7 Aleksander Miera 2018-03-15  333  static int 
evdi_platform_probe(struct platform_device *pdev)
60d03e018f5eb7 Aleksander Miera 2018-03-15  334  {
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  335         int ret = 0;
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  336         struct drm_device *dev 
= NULL;
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  337         struct 
evdi_platform_device_data *data =
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  338                 
kzalloc(sizeof(struct evdi_platform_device_data), GFP_KERNEL);

The check for NULL is missing.  Putting an allocation in the declaration
block is a bad idea and these allocations are disproportionatly buggy.
Generally functions which can fail should not be in the declaration
block.

60d03e018f5eb7 Aleksander Miera 2018-03-15  339  
60d03e018f5eb7 Aleksander Miera 2018-03-15  340         EVDI_CHECKPT();
60d03e018f5eb7 Aleksander Miera 2018-03-15  341  
60d03e018f5eb7 Aleksander Miera 2018-03-15  342         dev = 
drm_dev_alloc(&driver, &pdev->dev);
60d03e018f5eb7 Aleksander Miera 2018-03-15  343         if (IS_ERR(dev))
60d03e018f5eb7 Aleksander Miera 2018-03-15 @344                 return 
PTR_ERR(dev);

Memory leak.

60d03e018f5eb7 Aleksander Miera 2018-03-15  345  
60d03e018f5eb7 Aleksander Miera 2018-03-15  346         ret = 
evdi_driver_setup_early(dev);
60d03e018f5eb7 Aleksander Miera 2018-03-15  347         if (ret)
60d03e018f5eb7 Aleksander Miera 2018-03-15  348                 goto err_free;
60d03e018f5eb7 Aleksander Miera 2018-03-15  349  
60d03e018f5eb7 Aleksander Miera 2018-03-15  350         ret = 
drm_dev_register(dev, 0);
60d03e018f5eb7 Aleksander Miera 2018-03-15  351         if (ret)
60d03e018f5eb7 Aleksander Miera 2018-03-15  352                 goto err_free;
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  353         else {

Pull this back on tab so that the success path is always indented one
tab and the failure path is indented with two tabs characters.

f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  354                 data->drm_dev = 
dev;
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  355                 data->symlinked 
= false;
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  356                 
platform_set_drvdata(pdev, data);
f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  357         }
60d03e018f5eb7 Aleksander Miera 2018-03-15  358  
60d03e018f5eb7 Aleksander Miera 2018-03-15  359         
evdi_driver_setup_late(dev);
60d03e018f5eb7 Aleksander Miera 2018-03-15  360  
60d03e018f5eb7 Aleksander Miera 2018-03-15  361         return 0;
60d03e018f5eb7 Aleksander Miera 2018-03-15  362  
60d03e018f5eb7 Aleksander Miera 2018-03-15  363  err_free:
60d03e018f5eb7 Aleksander Miera 2018-03-15  364         drm_dev_put(dev);

When you fix this, keep in mind that passing a error pointer to
drm_dev_put() will cause a crash.  It's better to use "Free the last
successful allocation" style instead of a single error label for
everything.

err_put_dev:
        drm_dev_put(dev);
err_free_data:
        kfree(data);

        return ret;

f4affb3abb52e9 Łukasz Spintzyk  2020-12-11  365         kfree(data);
60d03e018f5eb7 Aleksander Miera 2018-03-15  366         return ret;
60d03e018f5eb7 Aleksander Miera 2018-03-15  367  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to