Skip to content

Commit

Permalink
regulator: da9063: better fix null deref with partial DT
Browse files Browse the repository at this point in the history
commit 30c694f upstream.

Two versions of the original patch were sent but V1 was merged instead
of V2 due to a mistake.

So update to V2.

The advantage of V2 is that it completely avoids dereferencing the pointer,
even just to take the address, which may fix problems with some compilers.
Both versions work on my gcc 9.4 but use the safer one.

Fixes: 98e2dd5 ("regulator: da9063: fix null pointer deref with partial DT config")
Signed-off-by: Martin Fuzzey <martin.fuzzey@flowbird.group>
Tested-by: Benjamin Bara <benjamin.bara@skidata.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20230804083514.1887124-1-martin.fuzzey@flowbird.group
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Martin Fuzzey authored and gregkh committed Aug 23, 2023
1 parent abcd2a0 commit aa402a3
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/regulator/da9063-regulator.c
Expand Up @@ -778,9 +778,6 @@ static int da9063_check_xvp_constraints(struct regulator_config *config)
const struct notification_limit *uv_l = &constr->under_voltage_limits;
const struct notification_limit *ov_l = &constr->over_voltage_limits;

if (!config->init_data) /* No config in DT, pointers will be invalid */
return 0;

/* make sure that only one severity is used to clarify if unchanged, enabled or disabled */
if ((!!uv_l->prot + !!uv_l->err + !!uv_l->warn) > 1) {
dev_err(config->dev, "%s: at most one voltage monitoring severity allowed!\n",
Expand Down Expand Up @@ -1031,9 +1028,12 @@ static int da9063_regulator_probe(struct platform_device *pdev)
config.of_node = da9063_reg_matches[id].of_node;
config.regmap = da9063->regmap;

ret = da9063_check_xvp_constraints(&config);
if (ret)
return ret;
/* Checking constraints requires init_data from DT. */
if (config.init_data) {
ret = da9063_check_xvp_constraints(&config);
if (ret)
return ret;
}

regl->rdev = devm_regulator_register(&pdev->dev, &regl->desc,
&config);
Expand Down

0 comments on commit aa402a3

Please sign in to comment.