arch/loongarch/pci/acpi.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
Add kfree(root_ops) in this case to avoid memleak root_ops,
leaks when pci_find_bus() != 0.
Also delay assign root_ops when used for making code read clean.
Found by code review
Signed-off-by: Wangyuli <wangyuli@uniontech.com>
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
---
arch/loongarch/pci/acpi.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c
index 3eb61b8cd5e3..7f3539f5fa23 100644
--- a/arch/loongarch/pci/acpi.c
+++ b/arch/loongarch/pci/acpi.c
@@ -219,17 +219,18 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
return NULL;
}
- root_ops->release_info = acpi_release_root_info;
- root_ops->prepare_resources = acpi_prepare_root_resources;
- root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
-
bus = pci_find_bus(domain, busnum);
if (bus) {
memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
kfree(info);
+ kfree(root_ops);
} else {
struct pci_bus *child;
+ root_ops->release_info = acpi_release_root_info;
+ root_ops->prepare_resources = acpi_prepare_root_resources;
+ root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
+
bus = acpi_pci_root_create(root, root_ops,
&info->common, info->cfg);
if (!bus) {
--
2.20.1
Hi, Wentao,
On Sat, Aug 31, 2024 at 1:24 PM Wentao Guan <guanwentao@uniontech.com> wrote:
>
> Add kfree(root_ops) in this case to avoid memleak root_ops,
> leaks when pci_find_bus() != 0.
> Also delay assign root_ops when used for making code read clean.
> Found by code review
>
> Signed-off-by: Wangyuli <wangyuli@uniontech.com>
This should be Yuli Wang <wangyuli@uniontech.com>
> Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
> ---
> arch/loongarch/pci/acpi.c | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c
> index 3eb61b8cd5e3..7f3539f5fa23 100644
> --- a/arch/loongarch/pci/acpi.c
> +++ b/arch/loongarch/pci/acpi.c
> @@ -219,17 +219,18 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
> return NULL;
> }
>
> - root_ops->release_info = acpi_release_root_info;
> - root_ops->prepare_resources = acpi_prepare_root_resources;
> - root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
> -
> bus = pci_find_bus(domain, busnum);
> if (bus) {
> memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
> kfree(info);
> + kfree(root_ops);
Add kfree() is fine, but move root_ops assignment is unnecessary.
Huacai
> } else {
> struct pci_bus *child;
>
> + root_ops->release_info = acpi_release_root_info;
> + root_ops->prepare_resources = acpi_prepare_root_resources;
> + root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
> +
> bus = acpi_pci_root_create(root, root_ops,
> &info->common, info->cfg);
> if (!bus) {
> --
> 2.20.1
>
>
On 2024/8/31 15:18, Huacai Chen wrote:
> Hi, Wentao,
>
> On Sat, Aug 31, 2024 at 1:24 PM Wentao Guan <guanwentao@uniontech.com> wrote:
>> Add kfree(root_ops) in this case to avoid memleak root_ops,
>> leaks when pci_find_bus() != 0.
>> Also delay assign root_ops when used for making code read clean.
>> Found by code review
>>
>> Signed-off-by: Wangyuli <wangyuli@uniontech.com>
> This should be Yuli Wang <wangyuli@uniontech.com>
While I maintain a preference for the traditional Chinese naming order,
not particularly like putting my Chinese name in the English surname order,
I acknowledge that flexibility in this matter is often necessary.
It is sufficient for everybody to be aware that both 'WangYuli' and
'Yuli Wang' refer to me.
>> Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
>> ---
>> arch/loongarch/pci/acpi.c | 9 +++++----
>> 1 file changed, 5 insertions(+), 4 deletions(-)
>>
>> diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c
>> index 3eb61b8cd5e3..7f3539f5fa23 100644
>> --- a/arch/loongarch/pci/acpi.c
>> +++ b/arch/loongarch/pci/acpi.c
>> @@ -219,17 +219,18 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
>> return NULL;
>> }
>>
>> - root_ops->release_info = acpi_release_root_info;
>> - root_ops->prepare_resources = acpi_prepare_root_resources;
>> - root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
>> -
>> bus = pci_find_bus(domain, busnum);
>> if (bus) {
>> memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
>> kfree(info);
>> + kfree(root_ops);
> Add kfree() is fine, but move root_ops assignment is unnecessary.
>
> Huacai
>
>> } else {
>> struct pci_bus *child;
>>
>> + root_ops->release_info = acpi_release_root_info;
>> + root_ops->prepare_resources = acpi_prepare_root_resources;
>> + root_ops->pci_ops = (struct pci_ops *)&info->cfg->ops->pci_ops;
>> +
>> bus = acpi_pci_root_create(root, root_ops,
>> &info->common, info->cfg);
>> if (!bus) {
>> --
>> 2.20.1
>>
>>
--
WangYuli
Hello Huacai:
Okay... It is my code smell, here is the patch after change.
From 73426019a83a77b4502491fc96d145e666b16936 Mon Sep 17 00:00:00 2001
From: Wentao Guan <guanwentao@uniontech.com>
Date: Sat, 31 Aug 2024 00:17:10 +0800
Subject: [PATCH] Loongarch64: pci: fix memleak in pci_acpi_scan_root
Add kfree(root_ops) in this case to avoid memleak root_ops,
leaks when pci_find_bus() != 0.
Signed-off-by: Wangyuli <wangyuli@uniontech.com>
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
---
arch/loongarch/pci/acpi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/loongarch/pci/acpi.c b/arch/loongarch/pci/acpi.c
index 3eb61b8cd5e3..f405409a3491 100644
--- a/arch/loongarch/pci/acpi.c
+++ b/arch/loongarch/pci/acpi.c
@@ -227,6 +227,7 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
if (bus) {
memcpy(bus->sysdata, info->cfg, sizeof(struct pci_config_window));
kfree(info);
+ kfree(root_ops);
} else {
struct pci_bus *child;
--
2.20.1
Hello Huacai: I found a mistake that my PATCH commit msg need change to "Loongarch: pci: fix memleak in pci_acpi_scan_root" Need to send patch v2?
On Sat, Aug 31, 2024 at 4:36 PM Wentao Guan <guanwentao@uniontech.com> wrote: > > Hello Huacai: > > I found a mistake that my PATCH commit msg need change to "Loongarch: pci: fix memleak in pci_acpi_scan_root" > Need to send patch v2? No need. Huacai
© 2016 - 2025 Red Hat, Inc.