* [PATCH] ARM: pxa: Fix a memory leak in pxa310_otg_exit()
@ 2022-08-03 6:00 ` Christophe JAILLET
0 siblings, 0 replies; 4+ messages in thread
From: Christophe JAILLET @ 2022-08-03 6:00 UTC (permalink / raw)
To: Daniel Mack, Haojian Zhuang, Robert Jarzmik, Russell King,
Sascha Hauer, Heikki Krogerus, Marek Vasut, Igor Grinberg,
Felipe Balbi
Cc: linux-kernel, kernel-janitors, Christophe JAILLET,
linux-arm-kernel
When otg_ulpi_create() is called, 2 kzalloc() are performed.
Only one is freed in pxa310_otg_exit().
The second kzalloc() has been introduced in the commit in the Fixes: tag.
Add the missing kfree().
Fixes: 298b083cf9dd ("usb: otg: ulpi: Start using struct usb_otg")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
This patch is NOT compile tested (I never cross compile even if I've been
tolled many times that it was easy...)
Another solution is to use devm_otg_ulpi_create() and further simplify
arch/arm/mach-pxa/pxa3xx-ulpi.c.
This would remove the only caller of otg_ulpi_create() and could also
simplify drivers/usb/phy/phy-ulpi.[ch]
---
arch/arm/mach-pxa/pxa3xx-ulpi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c
index c29a7f0fa1b0..82b4e2706f86 100644
--- a/arch/arm/mach-pxa/pxa3xx-ulpi.c
+++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c
@@ -229,6 +229,7 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata)
static void pxa310_otg_exit(void)
{
+ kfree(u2d->otg->otg);
kfree(u2d->otg);
}
#else
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH] ARM: pxa: Fix a memory leak in pxa310_otg_exit() @ 2022-08-03 6:00 ` Christophe JAILLET 0 siblings, 0 replies; 4+ messages in thread From: Christophe JAILLET @ 2022-08-03 6:00 UTC (permalink / raw) To: Daniel Mack, Haojian Zhuang, Robert Jarzmik, Russell King, Sascha Hauer, Heikki Krogerus, Marek Vasut, Igor Grinberg, Felipe Balbi Cc: linux-kernel, kernel-janitors, Christophe JAILLET, linux-arm-kernel When otg_ulpi_create() is called, 2 kzalloc() are performed. Only one is freed in pxa310_otg_exit(). The second kzalloc() has been introduced in the commit in the Fixes: tag. Add the missing kfree(). Fixes: 298b083cf9dd ("usb: otg: ulpi: Start using struct usb_otg") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- This patch is NOT compile tested (I never cross compile even if I've been tolled many times that it was easy...) Another solution is to use devm_otg_ulpi_create() and further simplify arch/arm/mach-pxa/pxa3xx-ulpi.c. This would remove the only caller of otg_ulpi_create() and could also simplify drivers/usb/phy/phy-ulpi.[ch] --- arch/arm/mach-pxa/pxa3xx-ulpi.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c index c29a7f0fa1b0..82b4e2706f86 100644 --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c @@ -229,6 +229,7 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) static void pxa310_otg_exit(void) { + kfree(u2d->otg->otg); kfree(u2d->otg); } #else -- 2.34.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] ARM: pxa: Fix a memory leak in pxa310_otg_exit() 2022-08-03 6:00 ` Christophe JAILLET @ 2022-08-03 13:31 ` Dan Carpenter -1 siblings, 0 replies; 4+ messages in thread From: Dan Carpenter @ 2022-08-03 13:31 UTC (permalink / raw) To: Christophe JAILLET Cc: Daniel Mack, Haojian Zhuang, Robert Jarzmik, Russell King, Sascha Hauer, Heikki Krogerus, Marek Vasut, Igor Grinberg, Felipe Balbi, linux-kernel, kernel-janitors, linux-arm-kernel On Wed, Aug 03, 2022 at 08:00:44AM +0200, Christophe JAILLET wrote: > arch/arm/mach-pxa/pxa3xx-ulpi.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c > index c29a7f0fa1b0..82b4e2706f86 100644 > --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c > +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c > @@ -229,6 +229,7 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) > > static void pxa310_otg_exit(void) > { > + kfree(u2d->otg->otg); > kfree(u2d->otg); It's unfortunate that we kept the "otg" name when changed u2d->otg to a phy. A lot of the stuff was renamed... I don't have a cross compile system set up either so I can't patch it but looks reasonably simple to rename the remaining instance to phy? diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c index c29a7f0fa1b0..a002fe1e96a2 100644 --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c @@ -30,7 +30,7 @@ struct pxa3xx_u2d_ulpi { struct clk *clk; void __iomem *mmio_base; - struct usb_phy *otg; + struct usb_phy *phy; unsigned int ulpi_mode; }; @@ -76,7 +76,7 @@ static int pxa310_ulpi_poll(void) return -ETIMEDOUT; } -static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg) +static int pxa310_ulpi_read(struct usb_phy *phy, u32 reg) { int err; @@ -95,7 +95,7 @@ static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg) return u2d_readl(U2DOTGUCR) & U2DOTGUCR_RDATA; } -static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg) +static int pxa310_ulpi_write(struct usb_phy *phy, u32 val, u32 reg) { if (pxa310_ulpi_get_phymode() != SYNCH) { pr_warn("%s: PHY is not in SYNCH mode!\n", __func__); @@ -136,19 +136,19 @@ static int pxa310_start_otg_host_transcvr(struct usb_bus *host) pxa310_otg_transceiver_rtsm(); - err = usb_phy_init(u2d->otg); + err = usb_phy_init(u2d->phy); if (err) { pr_err("OTG transceiver init failed"); return err; } - err = otg_set_vbus(u2d->otg->otg, 1); + err = otg_set_vbus(u2d->phy->otg, 1); if (err) { pr_err("OTG transceiver VBUS set failed"); return err; } - err = otg_set_host(u2d->otg->otg, host); + err = otg_set_host(u2d->phy->otg, host); if (err) pr_err("OTG transceiver Host mode set failed"); @@ -186,9 +186,9 @@ static void pxa310_stop_otg_hc(void) { pxa310_otg_transceiver_rtsm(); - otg_set_host(u2d->otg->otg, NULL); - otg_set_vbus(u2d->otg->otg, 0); - usb_phy_shutdown(u2d->otg); + otg_set_host(u2d->phy->otg, NULL); + otg_set_vbus(u2d->phy->otg, 0); + usb_phy_shutdown(u2d->phy); } static void pxa310_u2d_setup_otg_hc(void) @@ -218,18 +218,18 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) u2d->ulpi_mode = ulpi_mode; - u2d->otg = otg_ulpi_create(&pxa310_ulpi_access_ops, ulpi_mode); - if (!u2d->otg) + u2d->phy = otg_ulpi_create(&pxa310_ulpi_access_ops, ulpi_mode); + if (!u2d->phy) return -ENOMEM; - u2d->otg->io_priv = u2d->mmio_base; + u2d->phy->io_priv = u2d->mmio_base; return 0; } static void pxa310_otg_exit(void) { - kfree(u2d->otg); + kfree(u2d->phy); } #else static inline void pxa310_u2d_setup_otg_hc(void) {} ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] ARM: pxa: Fix a memory leak in pxa310_otg_exit() @ 2022-08-03 13:31 ` Dan Carpenter 0 siblings, 0 replies; 4+ messages in thread From: Dan Carpenter @ 2022-08-03 13:31 UTC (permalink / raw) To: Christophe JAILLET Cc: Daniel Mack, Haojian Zhuang, Robert Jarzmik, Russell King, Sascha Hauer, Heikki Krogerus, Marek Vasut, Igor Grinberg, Felipe Balbi, linux-kernel, kernel-janitors, linux-arm-kernel On Wed, Aug 03, 2022 at 08:00:44AM +0200, Christophe JAILLET wrote: > arch/arm/mach-pxa/pxa3xx-ulpi.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c > index c29a7f0fa1b0..82b4e2706f86 100644 > --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c > +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c > @@ -229,6 +229,7 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) > > static void pxa310_otg_exit(void) > { > + kfree(u2d->otg->otg); > kfree(u2d->otg); It's unfortunate that we kept the "otg" name when changed u2d->otg to a phy. A lot of the stuff was renamed... I don't have a cross compile system set up either so I can't patch it but looks reasonably simple to rename the remaining instance to phy? diff --git a/arch/arm/mach-pxa/pxa3xx-ulpi.c b/arch/arm/mach-pxa/pxa3xx-ulpi.c index c29a7f0fa1b0..a002fe1e96a2 100644 --- a/arch/arm/mach-pxa/pxa3xx-ulpi.c +++ b/arch/arm/mach-pxa/pxa3xx-ulpi.c @@ -30,7 +30,7 @@ struct pxa3xx_u2d_ulpi { struct clk *clk; void __iomem *mmio_base; - struct usb_phy *otg; + struct usb_phy *phy; unsigned int ulpi_mode; }; @@ -76,7 +76,7 @@ static int pxa310_ulpi_poll(void) return -ETIMEDOUT; } -static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg) +static int pxa310_ulpi_read(struct usb_phy *phy, u32 reg) { int err; @@ -95,7 +95,7 @@ static int pxa310_ulpi_read(struct usb_phy *otg, u32 reg) return u2d_readl(U2DOTGUCR) & U2DOTGUCR_RDATA; } -static int pxa310_ulpi_write(struct usb_phy *otg, u32 val, u32 reg) +static int pxa310_ulpi_write(struct usb_phy *phy, u32 val, u32 reg) { if (pxa310_ulpi_get_phymode() != SYNCH) { pr_warn("%s: PHY is not in SYNCH mode!\n", __func__); @@ -136,19 +136,19 @@ static int pxa310_start_otg_host_transcvr(struct usb_bus *host) pxa310_otg_transceiver_rtsm(); - err = usb_phy_init(u2d->otg); + err = usb_phy_init(u2d->phy); if (err) { pr_err("OTG transceiver init failed"); return err; } - err = otg_set_vbus(u2d->otg->otg, 1); + err = otg_set_vbus(u2d->phy->otg, 1); if (err) { pr_err("OTG transceiver VBUS set failed"); return err; } - err = otg_set_host(u2d->otg->otg, host); + err = otg_set_host(u2d->phy->otg, host); if (err) pr_err("OTG transceiver Host mode set failed"); @@ -186,9 +186,9 @@ static void pxa310_stop_otg_hc(void) { pxa310_otg_transceiver_rtsm(); - otg_set_host(u2d->otg->otg, NULL); - otg_set_vbus(u2d->otg->otg, 0); - usb_phy_shutdown(u2d->otg); + otg_set_host(u2d->phy->otg, NULL); + otg_set_vbus(u2d->phy->otg, 0); + usb_phy_shutdown(u2d->phy); } static void pxa310_u2d_setup_otg_hc(void) @@ -218,18 +218,18 @@ static int pxa310_otg_init(struct pxa3xx_u2d_platform_data *pdata) u2d->ulpi_mode = ulpi_mode; - u2d->otg = otg_ulpi_create(&pxa310_ulpi_access_ops, ulpi_mode); - if (!u2d->otg) + u2d->phy = otg_ulpi_create(&pxa310_ulpi_access_ops, ulpi_mode); + if (!u2d->phy) return -ENOMEM; - u2d->otg->io_priv = u2d->mmio_base; + u2d->phy->io_priv = u2d->mmio_base; return 0; } static void pxa310_otg_exit(void) { - kfree(u2d->otg); + kfree(u2d->phy); } #else static inline void pxa310_u2d_setup_otg_hc(void) {} _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-08-03 13:33 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-08-03 6:00 [PATCH] ARM: pxa: Fix a memory leak in pxa310_otg_exit() Christophe JAILLET 2022-08-03 6:00 ` Christophe JAILLET 2022-08-03 13:31 ` Dan Carpenter 2022-08-03 13:31 ` Dan Carpenter
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.