A mux with a value table returns -EINVAL from get_parent when the register holds a value missing from the table. clk_get_parent() only rejected indices >= num_parents, so -EINVAL went on to index the parents array as u8 234 and clk_dump crashed on the Amlogic G12 clock controller.
Let's return -ENODEV for negative indices as well. Signed-off-by: Ahmad Fatoum <[email protected]> --- drivers/clk/clk.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 99f995fb0224..1d6aaa46d9b1 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -382,7 +382,8 @@ struct clk *clk_get_parent(struct clk *clk) idx = clk->ops->get_parent(hw); - if (idx >= clk->num_parents) + /* an error means the register selects no known parent */ + if (idx < 0 || idx >= clk->num_parents) return ERR_PTR(-ENODEV); } else { idx = 0; -- 2.47.3
