]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/sysfb: ofdrm: fix PCI device reference leaks
authorYuho Choi <dbgh9129@gmail.com>
Mon, 20 Apr 2026 00:25:13 +0000 (20:25 -0400)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 27 Apr 2026 09:30:49 +0000 (11:30 +0200)
display_get_pci_dev_of() gets a referenced PCI device via
pci_get_device(). Drop that reference when pci_enable_device() fails and
release it during the managed teardown path after pci_disable_device().

Without that, ofdrm leaks the pci_dev reference on both the error path
and the normal cleanup path.

Fixes: c8a17756c425 ("drm/ofdrm: Add ofdrm for Open Firmware framebuffers")
Co-developed-by: Myeonghun Pak <mhun512@gmail.com>
Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
Co-developed-by: Ijae Kim <ae878000@gmail.com>
Signed-off-by: Ijae Kim <ae878000@gmail.com>
Co-developed-by: Taegyu Kim <tmk5904@psu.edu>
Signed-off-by: Taegyu Kim <tmk5904@psu.edu>
Signed-off-by: Yuho Choi <dbgh9129@gmail.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patch.msgid.link/20260420002513.216-1-dbgh9129@gmail.com
drivers/gpu/drm/sysfb/ofdrm.c

index d38ba70f4e0d37b7bd3cb4a65fdad8c42bf3c934..247cf13c80a055a8494110ebeded35cc1ac7c935 100644 (file)
@@ -350,6 +350,7 @@ static void ofdrm_pci_release(void *data)
        struct pci_dev *pcidev = data;
 
        pci_disable_device(pcidev);
+       pci_dev_put(pcidev);
 }
 
 static int ofdrm_device_init_pci(struct ofdrm_device *odev)
@@ -375,6 +376,7 @@ static int ofdrm_device_init_pci(struct ofdrm_device *odev)
        if (ret) {
                drm_err(dev, "pci_enable_device(%s) failed: %d\n",
                        dev_name(&pcidev->dev), ret);
+               pci_dev_put(pcidev);
                return ret;
        }
        ret = devm_add_action_or_reset(&pdev->dev, ofdrm_pci_release, pcidev);