• Stephen Boyd's avatar
    clkdev: Hold clocks_mutex while iterating clocks list · 5a7efdac
    Stephen Boyd authored
    We recently introduced a change to support devm clk lookups. That change
    introduced a code-path that used clk_find() without holding the
    'clocks_mutex'. Unfortunately, clk_find() iterates over the 'clocks'
    list and so we need to prevent the list from being modified at the same
    time. Do this by holding the mutex and checking to make sure it's held
    while iterating the list.
    
    Note, we don't really care if the lookup is freed after we find it with
    clk_find() because we're just doing a pointer comparison, but if we did
    care we would need to keep holding the mutex while we dereference the
    clk_lookup pointer.
    
    Fixes: 3eee6c7d ("clkdev: add managed clkdev lookup registration")
    Cc: Miquel Raynal <miquel.raynal@bootlin.com>
    Cc: Jerome Brunet <jbrunet@baylibre.com>
    Cc: Russell King <linux@armlinux.org.uk>
    Cc: Michael Turquette <mturquette@baylibre.com>
    Cc: Jeffrey Hugo <jhugo@codeaurora.org>
    Cc: Chen-Yu Tsai <wens@csie.org>
    Cc: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
    Acked-by: default avatarMatti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
    Tested-by: default avatarJeffrey Hugo <jhugo@codeaurora.org>
    Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
    5a7efdac
clkdev.c 10.6 KB