• Ashay Jaiswal's avatar
    regulator: core: fix race condition in regulator_put() · 3a8a47c5
    Ashay Jaiswal authored
    commit 83b0302d upstream.
    
    The regulator framework maintains a list of consumer regulators
    for a regulator device and protects it from concurrent access using
    the regulator device's mutex lock.
    
    In the case of regulator_put() the consumer is removed and regulator
    device's parameters are updated without holding the regulator device's
    mutex. This would lead to a race condition between the regulator_put()
    and any function which traverses the consumer list or modifies regulator
    device's parameters.
    Fix this race condition by holding the regulator device's mutex in case
    of regulator_put.
    Signed-off-by: default avatarAshay Jaiswal <ashayj@codeaurora.org>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    [bwh: Backported to 3.2:
     - Adjust context
     - Don't touch the comment; __regulator_put() has not been split out of
       regulator_put() here]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    3a8a47c5
core.c 78.6 KB