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] [day] [month] [year] [list]
Message-ID: <20150113190657.20842.90692@quantum>
Date:	Tue, 13 Jan 2015 11:06:57 -0800
From:	Mike Turquette <mturquette@...aro.org>
To:	Boris Brezillon <boris.brezillon@...e-electrons.com>,
	"Nicolas Ferre" <nicolas.ferre@...el.com>,
	"Jean-Christophe Plagniol-Villard" <plagnioj@...osoft.com>,
	"Alexandre Belloni" <alexandre.belloni@...e-electrons.com>
Cc:	linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
	"Bo Shen" <voice.shen@...el.com>,
	"Boris Brezillon" <boris.brezillon@...e-electrons.com>,
	stable@...r.kernel.org
Subject: Re: [PATCH v2] clk: at91: keep slow clk enabled to prevent system hang

Quoting Boris Brezillon (2015-01-13 06:44:06)
> All slow clk users are not properly claiming it (get + prepare + enable)
> before using it.
> If all users properly claiming this clock release it, the clock is
> disabled, but faulty users still depends on it, and the system hangs.
> 
> This fix prevents the slow clock from being disabled, and should solve the
> hanging issue, but offending drivers should be patched to properly claim
> this clock.
> 
> Signed-off-by: Boris Brezillon <boris.brezillon@...e-electrons.com>
> Reported-by: Bo Shen <voice.shen@...el.com>
> Cc: stable@...r.kernel.org

Applied to clk-fixes towards the next -rc.

Thanks,
Mike

> ---
>  drivers/clk/at91/clk-slow.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/clk/at91/clk-slow.c b/drivers/clk/at91/clk-slow.c
> index 32f7c1b..2f13bd5 100644
> --- a/drivers/clk/at91/clk-slow.c
> +++ b/drivers/clk/at91/clk-slow.c
> @@ -70,6 +70,7 @@ struct clk_sam9x5_slow {
>  
>  #define to_clk_sam9x5_slow(hw) container_of(hw, struct clk_sam9x5_slow, hw)
>  
> +static struct clk *slow_clk;
>  
>  static int clk_slow_osc_prepare(struct clk_hw *hw)
>  {
> @@ -357,6 +358,8 @@ at91_clk_register_sam9x5_slow(void __iomem *sckcr,
>         clk = clk_register(NULL, &slowck->hw);
>         if (IS_ERR(clk))
>                 kfree(slowck);
> +       else
> +               slow_clk = clk;
>  
>         return clk;
>  }
> @@ -433,6 +436,8 @@ at91_clk_register_sam9260_slow(struct at91_pmc *pmc,
>         clk = clk_register(NULL, &slowck->hw);
>         if (IS_ERR(clk))
>                 kfree(slowck);
> +       else
> +               slow_clk = clk;
>  
>         return clk;
>  }
> @@ -465,3 +470,25 @@ void __init of_at91sam9260_clk_slow_setup(struct device_node *np,
>  
>         of_clk_add_provider(np, of_clk_src_simple_get, clk);
>  }
> +
> +/*
> + * FIXME: All slow clk users are not properly claiming it (get + prepare +
> + * enable) before using it.
> + * If all users properly claiming this clock decide that they don't need it
> + * anymore (or are removed), it is disabled while faulty users are still
> + * requiring it, and the system hangs.
> + * Prevent this clock from being disabled until all users are properly
> + * requesting it.
> + * Once this is done we should remove this function and the slow_clk variable.
> + */
> +static int __init of_at91_clk_slow_retain(void)
> +{
> +       if (!slow_clk)
> +               return 0;
> +
> +       __clk_get(slow_clk);
> +       clk_prepare_enable(slow_clk);
> +
> +       return 0;
> +}
> +arch_initcall(of_at91_clk_slow_retain);
> -- 
> 1.9.1
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ