lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 25 Aug 2021 13:29:37 -0400
From:   Alan Stern <stern@...land.harvard.edu>
To:     Evgeny Novikov <novikov@...ras.ru>
Cc:     Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Andrew Lunn <andrew@...n.ch>,
        Mike Turquette <mturquette@...aro.org>,
        Kirill Shilimanov <kirill.shilimanov@...wei.com>,
        linux-usb@...r.kernel.org, linux-kernel@...r.kernel.org,
        ldv-project@...uxtesting.org
Subject: Re: [PATCH] usb: ehci-orion: Handle errors of clk_prepare_enable()
 in probe

On Wed, Aug 25, 2021 at 08:09:02PM +0300, Evgeny Novikov wrote:
> ehci_orion_drv_probe() did not account for possible errors of
> clk_prepare_enable() that in particular could cause invocation of
> clk_disable_unprepare() on clocks that were not prepared/enabled yet,
> e.g. in remove or on handling errors of usb_add_hcd() in probe. Though,
> there were several patches fixing different issues with clocks in this
> driver, they did not solve this problem.
> 
> Add handling of errors of clk_prepare_enable() in ehci_orion_drv_probe()
> to avoid calls of clk_disable_unprepare() without previous successful
> invocation of clk_prepare_enable().
> 
> Found by Linux Driver Verification project (linuxtesting.org).
> 
> Fixes: 8c869edaee07 ("ARM: Orion: EHCI: Add support for enabling clocks")
> Signed-off-by: Evgeny Novikov <novikov@...ras.ru>
> Co-developed-by: Kirill Shilimanov <kirill.shilimanov@...wei.com>
> Signed-off-by: Kirill Shilimanov <kirill.shilimanov@...wei.com>
> ---

Acked-by: Alan Stern <stern@...land.harvard.edu>

Do you intend to submit patches for the other EHCI drivers that don't 
check for errors in clk_prepare_enable()?  It looks like 
ehci-atmel.c, ehci-mv.c, and ehci-spear.c all need some attention.

The same is true for a bunch of the OHCI drivers: ohci-at91.c, 
ohci-exynos.c, ohci-s3c2410.c, and ohci-spear.c.

Didn't the Linux Driver Verification project identify this problem in 
all of these drivers?

Alan Stern

>  drivers/usb/host/ehci-orion.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
> index a319b1df3011..3626758b3e2a 100644
> --- a/drivers/usb/host/ehci-orion.c
> +++ b/drivers/usb/host/ehci-orion.c
> @@ -264,8 +264,11 @@ static int ehci_orion_drv_probe(struct platform_device *pdev)
>  	 * the clock does not exists.
>  	 */
>  	priv->clk = devm_clk_get(&pdev->dev, NULL);
> -	if (!IS_ERR(priv->clk))
> -		clk_prepare_enable(priv->clk);
> +	if (!IS_ERR(priv->clk)) {
> +		err = clk_prepare_enable(priv->clk);
> +		if (err)
> +			goto err_put_hcd;
> +	}
>  
>  	priv->phy = devm_phy_optional_get(&pdev->dev, "usb");
>  	if (IS_ERR(priv->phy)) {
> @@ -311,6 +314,7 @@ static int ehci_orion_drv_probe(struct platform_device *pdev)
>  err_dis_clk:
>  	if (!IS_ERR(priv->clk))
>  		clk_disable_unprepare(priv->clk);
> +err_put_hcd:
>  	usb_put_hcd(hcd);
>  err:
>  	dev_err(&pdev->dev, "init %s fail, %d\n",
> -- 
> 2.26.2
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ