From: Bjorn Helgaas <helgaas@kernel.org>
To: Chen Wang <unicornxw@gmail.com>
Cc: kwilczynski@kernel.org, u.kleine-koenig@baylibre.com,
aou@eecs.berkeley.edu, alex@ghiti.fr, arnd@arndb.de,
bwawrzyn@cisco.com, bhelgaas@google.com,
unicorn_wang@outlook.com, conor+dt@kernel.org,
18255117159@163.com, inochiama@gmail.com, kishon@kernel.org,
krzk+dt@kernel.org, lpieralisi@kernel.org, mani@kernel.org,
palmer@dabbelt.com, paul.walmsley@sifive.com, robh@kernel.org,
s-vadapalli@ti.com, tglx@linutronix.de,
thomas.richard@bootlin.com, sycamoremoon376@gmail.com,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org,
sophgo@lists.linux.dev, rabenda.cn@gmail.com,
chao.wei@sophgo.com, xiaoguang.xing@sophgo.com,
fengchun.li@sophgo.com
Subject: Re: [PATCH 2/5] PCI: cadence: Fix NULL pointer error for ops
Date: Thu, 28 Aug 2025 16:43:02 -0500 [thread overview]
Message-ID: <20250828214302.GA968773@bhelgaas> (raw)
In-Reply-To: <fca633eb6d667a90f875cdf1263fcea2bcc2c969.1756344464.git.unicorn_wang@outlook.com>
On Thu, Aug 28, 2025 at 10:17:17AM +0800, Chen Wang wrote:
> From: Chen Wang <unicorn_wang@outlook.com>
>
> ops of struct cdns_pcie may be NULL, direct use
> will result in a null pointer error.
>
> Add checking of pcie->ops before using it.
>
> Fixes: 40d957e6f9eb ("PCI: cadence: Add support to start link and verify link status")
Do you observe this NULL pointer dereference with an existing driver?
If this is only to make it possible to add a new driver that doesn't
supply a pcie->ops pointer, it doesn't need a Fixes: tag because
there's not a problem with existing drivers and this change would not
need to be backported.
If it *is* a problem with an existing driver, please point out which
one.
> Signed-off-by: Chen Wang <unicorn_wang@outlook.com>
> ---
> drivers/pci/controller/cadence/pcie-cadence-host.c | 2 +-
> drivers/pci/controller/cadence/pcie-cadence.c | 4 ++--
> drivers/pci/controller/cadence/pcie-cadence.h | 6 +++---
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c
> index 59a4631de79f..fffd63d6665e 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-host.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c
> @@ -531,7 +531,7 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(0), addr1);
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_DESC1(0), desc1);
>
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(12) |
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
> index 70a19573440e..61806bbd8aa3 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence.c
> @@ -92,7 +92,7 @@ void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 fn,
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_DESC1(r), desc1);
>
> /* Set the CPU address */
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) |
> @@ -123,7 +123,7 @@ void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie,
> }
>
> /* Set the CPU address */
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(17) |
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
> index 1d81c4bf6c6d..2f07ba661bda 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.h
> +++ b/drivers/pci/controller/cadence/pcie-cadence.h
> @@ -468,7 +468,7 @@ static inline u32 cdns_pcie_ep_fn_readl(struct cdns_pcie *pcie, u8 fn, u32 reg)
>
> static inline int cdns_pcie_start_link(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->start_link)
> + if (pcie->ops && pcie->ops->start_link)
> return pcie->ops->start_link(pcie);
>
> return 0;
> @@ -476,13 +476,13 @@ static inline int cdns_pcie_start_link(struct cdns_pcie *pcie)
>
> static inline void cdns_pcie_stop_link(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->stop_link)
> + if (pcie->ops && pcie->ops->stop_link)
> pcie->ops->stop_link(pcie);
> }
>
> static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->link_up)
> + if (pcie->ops && pcie->ops->link_up)
> return pcie->ops->link_up(pcie);
>
> return true;
> --
> 2.34.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Bjorn Helgaas <helgaas@kernel.org>
To: Chen Wang <unicornxw@gmail.com>
Cc: kwilczynski@kernel.org, u.kleine-koenig@baylibre.com,
aou@eecs.berkeley.edu, alex@ghiti.fr, arnd@arndb.de,
bwawrzyn@cisco.com, bhelgaas@google.com,
unicorn_wang@outlook.com, conor+dt@kernel.org,
18255117159@163.com, inochiama@gmail.com, kishon@kernel.org,
krzk+dt@kernel.org, lpieralisi@kernel.org, mani@kernel.org,
palmer@dabbelt.com, paul.walmsley@sifive.com, robh@kernel.org,
s-vadapalli@ti.com, tglx@linutronix.de,
thomas.richard@bootlin.com, sycamoremoon376@gmail.com,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org,
sophgo@lists.linux.dev, rabenda.cn@gmail.com,
chao.wei@sophgo.com, xiaoguang.xing@sophgo.com,
fengchun.li@sophgo.com
Subject: Re: [PATCH 2/5] PCI: cadence: Fix NULL pointer error for ops
Date: Thu, 28 Aug 2025 16:43:02 -0500 [thread overview]
Message-ID: <20250828214302.GA968773@bhelgaas> (raw)
In-Reply-To: <fca633eb6d667a90f875cdf1263fcea2bcc2c969.1756344464.git.unicorn_wang@outlook.com>
On Thu, Aug 28, 2025 at 10:17:17AM +0800, Chen Wang wrote:
> From: Chen Wang <unicorn_wang@outlook.com>
>
> ops of struct cdns_pcie may be NULL, direct use
> will result in a null pointer error.
>
> Add checking of pcie->ops before using it.
>
> Fixes: 40d957e6f9eb ("PCI: cadence: Add support to start link and verify link status")
Do you observe this NULL pointer dereference with an existing driver?
If this is only to make it possible to add a new driver that doesn't
supply a pcie->ops pointer, it doesn't need a Fixes: tag because
there's not a problem with existing drivers and this change would not
need to be backported.
If it *is* a problem with an existing driver, please point out which
one.
> Signed-off-by: Chen Wang <unicorn_wang@outlook.com>
> ---
> drivers/pci/controller/cadence/pcie-cadence-host.c | 2 +-
> drivers/pci/controller/cadence/pcie-cadence.c | 4 ++--
> drivers/pci/controller/cadence/pcie-cadence.h | 6 +++---
> 3 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/pci/controller/cadence/pcie-cadence-host.c b/drivers/pci/controller/cadence/pcie-cadence-host.c
> index 59a4631de79f..fffd63d6665e 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence-host.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence-host.c
> @@ -531,7 +531,7 @@ static int cdns_pcie_host_init_address_translation(struct cdns_pcie_rc *rc)
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_PCI_ADDR1(0), addr1);
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_DESC1(0), desc1);
>
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(12) |
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.c b/drivers/pci/controller/cadence/pcie-cadence.c
> index 70a19573440e..61806bbd8aa3 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.c
> +++ b/drivers/pci/controller/cadence/pcie-cadence.c
> @@ -92,7 +92,7 @@ void cdns_pcie_set_outbound_region(struct cdns_pcie *pcie, u8 busnr, u8 fn,
> cdns_pcie_writel(pcie, CDNS_PCIE_AT_OB_REGION_DESC1(r), desc1);
>
> /* Set the CPU address */
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(nbits) |
> @@ -123,7 +123,7 @@ void cdns_pcie_set_outbound_region_for_normal_msg(struct cdns_pcie *pcie,
> }
>
> /* Set the CPU address */
> - if (pcie->ops->cpu_addr_fixup)
> + if (pcie->ops && pcie->ops->cpu_addr_fixup)
> cpu_addr = pcie->ops->cpu_addr_fixup(pcie, cpu_addr);
>
> addr0 = CDNS_PCIE_AT_OB_REGION_CPU_ADDR0_NBITS(17) |
> diff --git a/drivers/pci/controller/cadence/pcie-cadence.h b/drivers/pci/controller/cadence/pcie-cadence.h
> index 1d81c4bf6c6d..2f07ba661bda 100644
> --- a/drivers/pci/controller/cadence/pcie-cadence.h
> +++ b/drivers/pci/controller/cadence/pcie-cadence.h
> @@ -468,7 +468,7 @@ static inline u32 cdns_pcie_ep_fn_readl(struct cdns_pcie *pcie, u8 fn, u32 reg)
>
> static inline int cdns_pcie_start_link(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->start_link)
> + if (pcie->ops && pcie->ops->start_link)
> return pcie->ops->start_link(pcie);
>
> return 0;
> @@ -476,13 +476,13 @@ static inline int cdns_pcie_start_link(struct cdns_pcie *pcie)
>
> static inline void cdns_pcie_stop_link(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->stop_link)
> + if (pcie->ops && pcie->ops->stop_link)
> pcie->ops->stop_link(pcie);
> }
>
> static inline bool cdns_pcie_link_up(struct cdns_pcie *pcie)
> {
> - if (pcie->ops->link_up)
> + if (pcie->ops && pcie->ops->link_up)
> return pcie->ops->link_up(pcie);
>
> return true;
> --
> 2.34.1
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2025-08-28 21:43 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-28 2:15 [PATCH 0/5] Add PCIe support to Sophgo SG2042 SoC Chen Wang
2025-08-28 2:15 ` Chen Wang
2025-08-28 2:16 ` [PATCH 1/5] dt-bindings: pci: Add Sophgo SG2042 PCIe host Chen Wang
2025-08-28 2:16 ` Chen Wang
2025-08-29 17:13 ` Rob Herring (Arm)
2025-08-29 17:13 ` Rob Herring (Arm)
2025-08-31 4:47 ` Manivannan Sadhasivam
2025-08-31 4:47 ` Manivannan Sadhasivam
2025-09-01 6:17 ` Chen Wang
2025-09-01 6:17 ` Chen Wang
2025-08-28 2:17 ` [PATCH 2/5] PCI: cadence: Fix NULL pointer error for ops Chen Wang
2025-08-28 2:17 ` Chen Wang
2025-08-28 21:43 ` Bjorn Helgaas [this message]
2025-08-28 21:43 ` Bjorn Helgaas
2025-08-29 0:16 ` Chen Wang
2025-08-29 0:16 ` Chen Wang
2025-08-28 2:17 ` [PATCH 3/5] PCI: sg2042: Add Sophgo SG2042 PCIe driver Chen Wang
2025-08-28 2:17 ` Chen Wang
2025-08-28 11:18 ` ALOK TIWARI
2025-08-28 11:18 ` ALOK TIWARI
2025-08-29 0:12 ` Chen Wang
2025-08-29 0:12 ` Chen Wang
2025-08-29 17:09 ` Rob Herring
2025-08-29 17:09 ` Rob Herring
2025-08-30 1:42 ` Chen Wang
2025-08-30 1:42 ` Chen Wang
2025-08-31 4:45 ` Manivannan Sadhasivam
2025-08-31 4:45 ` Manivannan Sadhasivam
2025-09-01 6:00 ` Chen Wang
2025-09-01 6:00 ` Chen Wang
2025-08-28 2:18 ` [PATCH 4/5] riscv: sophgo: dts: add pcie controllers for SG2042 Chen Wang
2025-08-28 2:18 ` Chen Wang
2025-08-28 2:18 ` [PATCH 5/5] riscv: sophgo: dts: enable pcie for PioneerBox Chen Wang
2025-08-28 2:18 ` Chen Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250828214302.GA968773@bhelgaas \
--to=helgaas@kernel.org \
--cc=18255117159@163.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=bwawrzyn@cisco.com \
--cc=chao.wei@sophgo.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=fengchun.li@sophgo.com \
--cc=inochiama@gmail.com \
--cc=kishon@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=rabenda.cn@gmail.com \
--cc=robh@kernel.org \
--cc=s-vadapalli@ti.com \
--cc=sophgo@lists.linux.dev \
--cc=sycamoremoon376@gmail.com \
--cc=tglx@linutronix.de \
--cc=thomas.richard@bootlin.com \
--cc=u.kleine-koenig@baylibre.com \
--cc=unicorn_wang@outlook.com \
--cc=unicornxw@gmail.com \
--cc=xiaoguang.xing@sophgo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.