Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1335485

[PATCH] regulator: s5m8767: fix get_register() error handling

Path csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod
From Arnd Bergmann <arnd@arndb.de>
Newsgroups linux.kernel
Subject [PATCH] regulator: s5m8767: fix get_register() error handling
Date Tue, 16 Feb 2016 16:00:03 +0100
Message-ID <r2PgD-KD-25@gated-at.bofh.it> (permalink)
X-Mailer git-send-email 2.7.0
X-Provags-ID V03:K0:ZCtT/liupFpiJcVlnyYWRG3sUHEUSq1/xdTiiYXMCZ6MC/0o0xj SafBvJoaSSRT9tHHmJuL82nd+dSzslge0q+jras9E44ZJ7madYsBb/n2QHWoghjmfZdQ3Ev ZLES83o+2dWKil+ikmyG+okx4rJEqv2UukJDOx8mhN+0dcaAywMbcHB8ZmUBnwZAk5DJo14 /0/dDT5PArpKR/lbyh2+g==
X-Ui-Out-Filterresults notjunk:1;V01:K0:AIX7nsAN+ck=:DIp036UwPTlv1lj/pZbq3M RVHLr54BLNqHdmyjf1WUL/SAM4soERhB1XTC/zB+vNn26CZo8fpeyfKpVM0P9MLpJ/kibf6rq cpc/O76Wh+KaUs0kaPgpjjZsZ801FBbkOgyE4HKNGnd3XK29epFbNueA9MrO4N1dMPJ2ct+7D vaXAC0/8M7ncYanARDnTWpWvsDvdpNDoE8aPUEQL6lUpXBpFzyXx2EYBQyI8eH4s/n/ZXh7AD lRSzkBZ7DnWRlFTDD38VQY6cm2vuURNR6rXDheHEI6EolFeQkWEehpwvvBJjPM+HOvKyTYnpA 848ICYgahDnYP+H0ZzCgvQIJ4+xbqy0U9jdd1Gx7u6S3ePcCyJV/Qxl/mSamG8f2r3X1OuwU+ 8ZcG66XjEha9bzTu/wUABlNTGOOQsttiKxR/tSFd6NIyJkaQy+zGs+6p5xe1fzDFG3fsgj3DS /kkMwJOXL+MzVB5RvSBctg2PZW7nWw6/xuxs0Fy3Ga5P/0gCVOG22cIHlrAruWqVuS0/0Ph3g mks+HovTJfQMdV3Ziq7eRP5T8s0FxoB9W4zpqO473uYIBKUrIDICyFNnWk7mi1MY+bd8JJDNi UPi8+GZI3jehdtTvEYIz1oQppaMzxS9X7skvj23sJsOQ8t2S+RfhjxhVS9YN2l1ZagXJv1NGG k8XQPOSc55pGq9d++opEuLLYhJ42Hv/mkEMz8R0+ZUJRghp+HW8DJDvmH0fjNrS6Td/4=
Sender robomod@news.nic.it
List-ID <linux-kernel.vger.kernel.org>
X-Mailing-List linux-kernel@vger.kernel.org
Approved robomod@news.nic.it
Lines 60
Organization linux.* mail to news gateway
X-Original-Cc linux-arm-kernel@lists.infradead.org, Arnd Bergmann <arnd@arndb.de>, Sangbeom Kim <sbkim73@samsung.com>, Krzysztof Kozlowski <k.kozlowski@samsung.com>, Liam Girdwood <lgirdwood@gmail.com>, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org
X-Original-Date Tue, 16 Feb 2016 15:53:11 +0100
X-Original-Message-ID <1455634402-1997203-1-git-send-email-arnd@arndb.de>
X-Original-Sender linux-kernel-owner@vger.kernel.org
Xref csiph.com linux.kernel:1335485

Show key headers only | View raw


The s5m8767_pmic_probe() function calls s5m8767_get_register() to
read data without checking the return code, which produces a compile-time
warning when that data is accessed:

drivers/regulator/s5m8767.c: In function 's5m8767_pmic_probe':
drivers/regulator/s5m8767.c:924:7: error: 'enable_reg' may be used uninitialized in this function [-Werror=maybe-uninitialized]
drivers/regulator/s5m8767.c:944:30: error: 'enable_val' may be used uninitialized in this function [-Werror=maybe-uninitialized]

This changes the s5m8767_get_register() function to return a -EINVAL
not just for an invalid register number but also for an invalid
regulator number, as both would result in returning uninitialized
data. The s5m8767_pmic_probe() function is then changed accordingly
to fail on a read error, as all the other callers of s5m8767_get_register()
already do.

In practice this probably cannot happen, as we don't call
s5m8767_get_register() with invalid arguments, but the gcc
warning seems valid in principle, in terms writing safe
error checking.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Fixes: 9c4c60554acf ("regulator: s5m8767: Convert to use regulator_[enable|disable|is_enabled]_regmap")
---
 drivers/regulator/s5m8767.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c
index 58f5d3b8e981..27343e1c43ef 100644
--- a/drivers/regulator/s5m8767.c
+++ b/drivers/regulator/s5m8767.c
@@ -202,9 +202,10 @@ static int s5m8767_get_register(struct s5m8767_info *s5m8767, int reg_id,
 		}
 	}
 
-	if (i < s5m8767->num_regulators)
-		*enable_ctrl =
-		s5m8767_opmode_reg[reg_id][mode] << S5M8767_ENCTRL_SHIFT;
+	if (i >= s5m8767->num_regulators)
+		return -EINVAL;
+
+	*enable_ctrl = s5m8767_opmode_reg[reg_id][mode] << S5M8767_ENCTRL_SHIFT;
 
 	return 0;
 }
@@ -937,8 +938,12 @@ static int s5m8767_pmic_probe(struct platform_device *pdev)
 			else
 				regulators[id].vsel_mask = 0xff;
 
-			s5m8767_get_register(s5m8767, id, &enable_reg,
+			ret = s5m8767_get_register(s5m8767, id, &enable_reg,
 					     &enable_val);
+			if (ret) {
+				dev_err(s5m8767->dev, "error reading registers\n");
+				return ret;
+			}
 			regulators[id].enable_reg = enable_reg;
 			regulators[id].enable_mask = S5M8767_ENCTRL_MASK;
 			regulators[id].enable_val = enable_val;
-- 
2.7.0

Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

[PATCH] regulator: s5m8767: fix get_register() error handling Arnd Bergmann <arnd@arndb.de> - 2016-02-16 16:00 +0100
  Re: [PATCH] regulator: s5m8767: fix get_register() error handling Krzysztof Kozlowski <k.kozlowski@samsung.com> - 2016-02-17 01:10 +0100
  Applied "regulator: s5m8767: fix get_register() error handling" to the regulator tree Mark Brown <broonie@kernel.org> - 2016-02-17 14:10 +0100

csiph-web