Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf47b4fd authored by Pawel Moll's avatar Pawel Moll Committed by Mike Turquette
Browse files

clk: Check parent for NULL in clk_change_rate



clk_change_rate() is accessing parent's rate without checking
if the parent exists at all. In case of root clocks this will
cause NULL pointer dereference.

This patch follows what clk_calc_new_rates() does in such
situation.

Signed-off-by: default avatarPawel Moll <pawel.moll@arm.com>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
Cc: stable@kernel.org
parent 7975059d
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -850,18 +850,21 @@ static void clk_change_rate(struct clk *clk)
{
	struct clk *child;
	unsigned long old_rate;
	unsigned long best_parent_rate = 0;
	struct hlist_node *tmp;

	old_rate = clk->rate;

	if (clk->parent)
		best_parent_rate = clk->parent->rate;

	if (clk->ops->set_rate)
		clk->ops->set_rate(clk->hw, clk->new_rate, clk->parent->rate);
		clk->ops->set_rate(clk->hw, clk->new_rate, best_parent_rate);

	if (clk->ops->recalc_rate)
		clk->rate = clk->ops->recalc_rate(clk->hw,
				clk->parent->rate);
		clk->rate = clk->ops->recalc_rate(clk->hw, best_parent_rate);
	else
		clk->rate = clk->parent->rate;
		clk->rate = best_parent_rate;

	if (clk->notifier_count && old_rate != clk->rate)
		__clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);