2019-09-23 15:13:10

by Axel Lin

[permalink] [raw]
Subject: [PATCH] regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF

Use of_device_get_match_data which has NULL test for match before
dereference match->data. Add NULL test for drvtype so it still works
for fixed_voltage_ops when !CONFIG_OF.

Signed-off-by: Axel Lin <[email protected]>
---
drivers/regulator/fixed.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
index d90a6fd8cbc7..f81533070058 100644
--- a/drivers/regulator/fixed.c
+++ b/drivers/regulator/fixed.c
@@ -144,8 +144,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct fixed_voltage_config *config;
struct fixed_voltage_data *drvdata;
- const struct fixed_dev_type *drvtype =
- of_match_device(dev->driver->of_match_table, dev)->data;
+ const struct fixed_dev_type *drvtype = of_device_get_match_data(dev);
struct regulator_config cfg = { };
enum gpiod_flags gflags;
int ret;
@@ -177,7 +176,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
drvdata->desc.type = REGULATOR_VOLTAGE;
drvdata->desc.owner = THIS_MODULE;

- if (drvtype->has_enable_clock) {
+ if (drvtype && drvtype->has_enable_clock) {
drvdata->desc.ops = &fixed_voltage_clkenabled_ops;

drvdata->enable_clock = devm_clk_get(dev, NULL);
--
2.20.1


2019-09-25 08:31:54

by Philippe Schenker

[permalink] [raw]
Subject: Re: [PATCH] regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF

On Sun, 2019-09-22 at 10:29 +0800, Axel Lin wrote:
> Use of_device_get_match_data which has NULL test for match before
> dereference match->data. Add NULL test for drvtype so it still works
> for fixed_voltage_ops when !CONFIG_OF.
>
> Signed-off-by: Axel Lin <[email protected]>

Reviewed-by: Philippe Schenker <[email protected]>

> ---
> drivers/regulator/fixed.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
> index d90a6fd8cbc7..f81533070058 100644
> --- a/drivers/regulator/fixed.c
> +++ b/drivers/regulator/fixed.c
> @@ -144,8 +144,7 @@ static int reg_fixed_voltage_probe(struct
> platform_device *pdev)
> struct device *dev = &pdev->dev;
> struct fixed_voltage_config *config;
> struct fixed_voltage_data *drvdata;
> - const struct fixed_dev_type *drvtype =
> - of_match_device(dev->driver->of_match_table, dev)->data;
> + const struct fixed_dev_type *drvtype =
> of_device_get_match_data(dev);
> struct regulator_config cfg = { };
> enum gpiod_flags gflags;
> int ret;
> @@ -177,7 +176,7 @@ static int reg_fixed_voltage_probe(struct
> platform_device *pdev)
> drvdata->desc.type = REGULATOR_VOLTAGE;
> drvdata->desc.owner = THIS_MODULE;
>
> - if (drvtype->has_enable_clock) {
> + if (drvtype && drvtype->has_enable_clock) {
> drvdata->desc.ops = &fixed_voltage_clkenabled_ops;
>
> drvdata->enable_clock = devm_clk_get(dev, NULL);

2019-09-25 23:54:53

by Mark Brown

[permalink] [raw]
Subject: Applied "regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF" to the regulator tree

The patch

regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF

has been applied to the regulator tree at

https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-5.4

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

From 1d6db22ff7d67a17c571543c69c63b1d261249b0 Mon Sep 17 00:00:00 2001
From: Axel Lin <[email protected]>
Date: Sun, 22 Sep 2019 10:29:28 +0800
Subject: [PATCH] regulator: fixed: Prevent NULL pointer dereference when
!CONFIG_OF

Use of_device_get_match_data which has NULL test for match before
dereference match->data. Add NULL test for drvtype so it still works
for fixed_voltage_ops when !CONFIG_OF.

Signed-off-by: Axel Lin <[email protected]>
Reviewed-by: Philippe Schenker <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
---
drivers/regulator/fixed.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
index d90a6fd8cbc7..f81533070058 100644
--- a/drivers/regulator/fixed.c
+++ b/drivers/regulator/fixed.c
@@ -144,8 +144,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct fixed_voltage_config *config;
struct fixed_voltage_data *drvdata;
- const struct fixed_dev_type *drvtype =
- of_match_device(dev->driver->of_match_table, dev)->data;
+ const struct fixed_dev_type *drvtype = of_device_get_match_data(dev);
struct regulator_config cfg = { };
enum gpiod_flags gflags;
int ret;
@@ -177,7 +176,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
drvdata->desc.type = REGULATOR_VOLTAGE;
drvdata->desc.owner = THIS_MODULE;

- if (drvtype->has_enable_clock) {
+ if (drvtype && drvtype->has_enable_clock) {
drvdata->desc.ops = &fixed_voltage_clkenabled_ops;

drvdata->enable_clock = devm_clk_get(dev, NULL);
--
2.20.1

2019-10-07 14:24:59

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] regulator: fixed: Prevent NULL pointer dereference when !CONFIG_OF

On Sun, Sep 22, 2019 at 10:29:28AM +0800, Axel Lin wrote:
> Use of_device_get_match_data which has NULL test for match before
> dereference match->data. Add NULL test for drvtype so it still works
> for fixed_voltage_ops when !CONFIG_OF.
>
> Signed-off-by: Axel Lin <[email protected]>
> Reviewed-by: Philippe Schenker <[email protected]>

Tested-by: Guenter Roeck <[email protected]>

> ---
> drivers/regulator/fixed.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
> index d90a6fd8cbc7..f81533070058 100644
> --- a/drivers/regulator/fixed.c
> +++ b/drivers/regulator/fixed.c
> @@ -144,8 +144,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
> struct device *dev = &pdev->dev;
> struct fixed_voltage_config *config;
> struct fixed_voltage_data *drvdata;
> - const struct fixed_dev_type *drvtype =
> - of_match_device(dev->driver->of_match_table, dev)->data;
> + const struct fixed_dev_type *drvtype = of_device_get_match_data(dev);
> struct regulator_config cfg = { };
> enum gpiod_flags gflags;
> int ret;
> @@ -177,7 +176,7 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
> drvdata->desc.type = REGULATOR_VOLTAGE;
> drvdata->desc.owner = THIS_MODULE;
>
> - if (drvtype->has_enable_clock) {
> + if (drvtype && drvtype->has_enable_clock) {
> drvdata->desc.ops = &fixed_voltage_clkenabled_ops;
>
> drvdata->enable_clock = devm_clk_get(dev, NULL);