Re: [PATCH] Revert "PCI: Fix reference leak in pci_register_host_bridge()"

From: liwei (JK)
Date: Sun Apr 13 2025 - 22:41:33 EST




在 2025/4/12 11:18, liwei (JK) 写道:


在 2025/4/10 19:19, Su Hui 写道:
On 2025/4/10 11:28, Xiangwei Li wrote:
This reverts commit 804443c1f27883926de94c849d91f5b7d7d696e9.

The newly added logic incorrectly sets bus_registered to true even when
device_register returns an error, this is incorrect.

When device_register fails, there is no need to release the reference count,
I think you missed some thing about device_register(). This patch is wrong.

device_register()
     -> device_initialize()
               -> kobject_init()
                     -> kobject_init_internal()
                         -> kref_init(&kobj->kref);  //set kref->refcount to 1
                            ^^^^^^^^^^^^^^^^^^^^^

Sorry, I missed the initialization of refcount in device_initialize,
but I’m confused about the branch logic for bus_registered. Why isn’t
free(bus) executed when bus_registered == true? My understanding is
that the kobject_cleanup operation triggered when refcount reaches zero
does not clean up the allocated bus. Could you clarify this further?

Thanks,
Xiangwei Li
Hi Su,

Thank you very much for your explanation. Based on your response and an
analysis of the corresponding release paths, this confirms that the
issue I previously raised does not exist in your patch.

Release path:
kobject_cleanup
->device_release // device_ktype.device_release
->release_pcibus_dev // pcibus_class.release_pcibus_dev
->kfree(pci_bus) // free(bus)

Thanks,
Xiangwei Li

device_register() only  fails when device_add() fails, and kerf->refcount can be 1
at this time ,  so we need to call put_deivce() to release  memory.
and there are no direct error-handling operations following its execution.

Therefore, this patch is meaningless and should be reverted.

Fixes: 804443c1f278 ("PCI: Fix reference leak in pci_register_host_bridge()")
Signed-off-by: Xiangwei Li <liwei728@xxxxxxxxxx>
Signed-off-by: Xiongfeng Wang <wangxiongfeng2@xxxxxxxxxx>