]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.9.131/regulator-fix-crash-caused-by-null-driver-data.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.9.131 / regulator-fix-crash-caused-by-null-driver-data.patch
1 From fb6de923ca3358a91525552b4907d4cb38730bdd Mon Sep 17 00:00:00 2001
2 From: Yu Zhao <yuzhao@google.com>
3 Date: Wed, 19 Sep 2018 15:30:51 -0600
4 Subject: regulator: fix crash caused by null driver data
5
6 From: Yu Zhao <yuzhao@google.com>
7
8 commit fb6de923ca3358a91525552b4907d4cb38730bdd upstream.
9
10 dev_set_drvdata() needs to be called before device_register()
11 exposes device to userspace. Otherwise kernel crashes after it
12 gets null pointer from dev_get_drvdata() when userspace tries
13 to access sysfs entries.
14
15 [Removed backtrace for length -- broonie]
16
17 Signed-off-by: Yu Zhao <yuzhao@google.com>
18 Signed-off-by: Mark Brown <broonie@kernel.org>
19 Cc: stable@vger.kernel.org
20 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
21
22 ---
23 drivers/regulator/core.c | 2 +-
24 1 file changed, 1 insertion(+), 1 deletion(-)
25
26 --- a/drivers/regulator/core.c
27 +++ b/drivers/regulator/core.c
28 @@ -4054,13 +4054,13 @@ regulator_register(const struct regulato
29 !rdev->desc->fixed_uV)
30 rdev->is_switch = true;
31
32 + dev_set_drvdata(&rdev->dev, rdev);
33 ret = device_register(&rdev->dev);
34 if (ret != 0) {
35 put_device(&rdev->dev);
36 goto unset_supplies;
37 }
38
39 - dev_set_drvdata(&rdev->dev, rdev);
40 rdev_init_debugfs(rdev);
41
42 /* try to resolve regulators supply since a new one was registered */