• Stephen Warren's avatar
    regulator: clear state each invocation of of_regulator_match · a2f95c36
    Stephen Warren authored
    of_regulator_match() saves some dynamcially allocated state into the
    match table that's passed to it. By implementation and not contract, for
    each match table entry, if non-NULL state is already present,
    of_regulator_match() will not overwrite it. of_regulator_match() is
    typically called each time a regulator is probe()d. This means it is
    called with the same match table over and over again if a regulator
    triggers deferred probe. This results in stale, kfree()d data being left
    in the match table from probe to probe, which causes a variety of crashes
    or use of invalid data.
    
    Explicitly free all output state from of_regulator_match() before
    generating new results in order to avoid this.
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Cc: stable@vger.kernel.org
    a2f95c36
of_regulator.c 4.84 KB