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

Commit e71c69fc authored by Victor N. Ramos Mello's avatar Victor N. Ramos Mello Committed by Maxime Ripard
Browse files

drivers: clk: sunxi: Fix memory leakage in clk-sunxi.c



Fix a possible memory leak in sun4i_osc_clk_setup().
Moved clock-frequency check to save superfluous allocation.

Signed-off-by: default avatarVictor N. Ramos Mello <victornrm@gmail.com>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent 8e6a4c40
Loading
Loading
Loading
Loading
+17 −11
Original line number Diff line number Diff line
@@ -38,18 +38,16 @@ static void __init sun4i_osc_clk_setup(struct device_node *node)
	const char *clk_name = node->name;
	u32 rate;

	if (of_property_read_u32(node, "clock-frequency", &rate))
		return;

	/* allocate fixed-rate and gate clock structs */
	fixed = kzalloc(sizeof(struct clk_fixed_rate), GFP_KERNEL);
	if (!fixed)
		return;
	gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
	if (!gate) {
		kfree(fixed);
		return;
	}

	if (of_property_read_u32(node, "clock-frequency", &rate))
		return;
	if (!gate)
		goto err_free_fixed;

	/* set up gate and fixed rate properties */
	gate->reg = of_iomap(node, 0);
@@ -64,10 +62,18 @@ static void __init sun4i_osc_clk_setup(struct device_node *node)
			&gate->hw, &clk_gate_ops,
			CLK_IS_ROOT);

	if (!IS_ERR(clk)) {
	if (IS_ERR(clk))
		goto err_free_gate;

	of_clk_add_provider(node, of_clk_src_simple_get, clk);
	clk_register_clkdev(clk, clk_name, NULL);
	}

	return;

err_free_gate:
	kfree(gate);
err_free_fixed:
	kfree(fixed);
}
CLK_OF_DECLARE(sun4i_osc, "allwinner,sun4i-osc-clk", sun4i_osc_clk_setup);