[PATCH 3/3] ASOC: sma1303: change the overall contents
Dan Carpenter
error27 at gmail.com
Fri Jan 6 08:51:30 CET 2023
Hi Kiseok,
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kiseok-Jo/ASoC-sma1303-Add-driver-for-Iron-Device-SMA1303-Amp/20230104-150052
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
patch link: https://lore.kernel.org/r/20230104064342.2094-4-kiseok.jo%40irondevice.com
patch subject: [PATCH 3/3] ASOC: sma1303: change the overall contents
config: ia64-randconfig-m041-20230101
compiler: ia64-linux-gcc (GCC) 12.1.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>
| Reported-by: Dan Carpenter <error27 at gmail.com>
smatch warnings:
sound/soc/codecs/sma1303.c:257 sma1303_regmap_write() error: uninitialized symbol 'ret'.
sound/soc/codecs/sma1303.c:275 sma1303_regmap_update_bits() error: uninitialized symbol 'ret'.
sound/soc/codecs/sma1303.c:293 sma1303_regmap_read() error: uninitialized symbol 'ret'.
sound/soc/codecs/sma1303.c:684 sma1303_add_component_controls() error: not allocating enough for = 'name' 8 vs 3
(This should allocate sizeof() not ARRAY_SIZE()).
sound/soc/codecs/sma1303.c:1539 sma1303_i2c_probe() warn: unsigned 'value' is never less than zero.
vim +/ret +257 sound/soc/codecs/sma1303.c
287cf116194f9c Kiseok Jo 2023-01-04 242 static int sma1303_regmap_write(struct sma1303_priv *sma1303,
0b15568ccfb962 Kiseok Jo 2023-01-04 243 unsigned int reg, unsigned int val)
0b15568ccfb962 Kiseok Jo 2023-01-04 244 {
287cf116194f9c Kiseok Jo 2023-01-04 245 int ret;
287cf116194f9c Kiseok Jo 2023-01-04 246 int cnt = sma1303->retry_cnt;
0b15568ccfb962 Kiseok Jo 2023-01-04 247
287cf116194f9c Kiseok Jo 2023-01-04 248 while (cnt--) {
The way I look at it, you need three bugs for this to affect real life:
BUG 1: sma1303_regmap_write() is not written robustly (this warning).
BUG 2: sma1303_i2c_probe() allows sma1303->retry_cnt of zero (it does).
BUG 3: The i2c-retry_count is set to zero. (Probably not but also not
unimaginable).
So, yeah, let's fix BUG 2 because retry_cnt of zero is bogus.
if (!of_property_read_u32(np, "i2c-retry_count", &value)) {
- if (value > 50 || value < 0) {
+ if (value > 50 || value <= 0) {
sma1303->retry_cnt = SMA1303_I2C_RETRY_COUNT;
And BUG 1 to make the checker happy.
- int ret;
+ int ret = -EINVAL;
287cf116194f9c Kiseok Jo 2023-01-04 249 ret = regmap_write(sma1303->regmap, reg, val);
0b15568ccfb962 Kiseok Jo 2023-01-04 250 if (ret < 0) {
287cf116194f9c Kiseok Jo 2023-01-04 251 dev_err(sma1303->dev, "Failed to write [0x%02X]\n", reg);
287cf116194f9c Kiseok Jo 2023-01-04 252 if (gCallback.set_i2c_err)
287cf116194f9c Kiseok Jo 2023-01-04 253 gCallback.set_i2c_err(sma1303->dev, ret);
287cf116194f9c Kiseok Jo 2023-01-04 254 } else
287cf116194f9c Kiseok Jo 2023-01-04 255 break;
0b15568ccfb962 Kiseok Jo 2023-01-04 256 }
0b15568ccfb962 Kiseok Jo 2023-01-04 @257 return ret;
0b15568ccfb962 Kiseok Jo 2023-01-04 258 }
0b15568ccfb962 Kiseok Jo 2023-01-04 259
287cf116194f9c Kiseok Jo 2023-01-04 260 static int sma1303_regmap_update_bits(struct sma1303_priv *sma1303,
0b15568ccfb962 Kiseok Jo 2023-01-04 261 unsigned int reg, unsigned int mask, unsigned int val)
0b15568ccfb962 Kiseok Jo 2023-01-04 262 {
287cf116194f9c Kiseok Jo 2023-01-04 263 int ret;
287cf116194f9c Kiseok Jo 2023-01-04 264 int cnt = sma1303->retry_cnt;
0b15568ccfb962 Kiseok Jo 2023-01-04 265
287cf116194f9c Kiseok Jo 2023-01-04 266 while (cnt--) {
287cf116194f9c Kiseok Jo 2023-01-04 267 ret = regmap_update_bits(sma1303->regmap, reg, mask, val);
0b15568ccfb962 Kiseok Jo 2023-01-04 268 if (ret < 0) {
287cf116194f9c Kiseok Jo 2023-01-04 269 dev_err(sma1303->dev, "Failed to update [0x%02X]\n", reg);
287cf116194f9c Kiseok Jo 2023-01-04 270 if (gCallback.set_i2c_err)
287cf116194f9c Kiseok Jo 2023-01-04 271 gCallback.set_i2c_err(sma1303->dev, ret);
287cf116194f9c Kiseok Jo 2023-01-04 272 } else
287cf116194f9c Kiseok Jo 2023-01-04 273 break;
0b15568ccfb962 Kiseok Jo 2023-01-04 274 }
0b15568ccfb962 Kiseok Jo 2023-01-04 @275 return ret;
0b15568ccfb962 Kiseok Jo 2023-01-04 276 }
0b15568ccfb962 Kiseok Jo 2023-01-04 277
287cf116194f9c Kiseok Jo 2023-01-04 278 static int sma1303_regmap_read(struct sma1303_priv *sma1303,
287cf116194f9c Kiseok Jo 2023-01-04 279 unsigned int reg, unsigned int *val)
0b15568ccfb962 Kiseok Jo 2023-01-04 280 {
287cf116194f9c Kiseok Jo 2023-01-04 281 int ret;
287cf116194f9c Kiseok Jo 2023-01-04 282 int cnt = sma1303->retry_cnt;
0b15568ccfb962 Kiseok Jo 2023-01-04 283
287cf116194f9c Kiseok Jo 2023-01-04 284 while (cnt--) {
287cf116194f9c Kiseok Jo 2023-01-04 285 ret = regmap_read(sma1303->regmap, reg, val);
0b15568ccfb962 Kiseok Jo 2023-01-04 286 if (ret < 0) {
287cf116194f9c Kiseok Jo 2023-01-04 287 dev_err(sma1303->dev, "Failed to read [0x%02X]\n", reg);
287cf116194f9c Kiseok Jo 2023-01-04 288 if (gCallback.set_i2c_err)
287cf116194f9c Kiseok Jo 2023-01-04 289 gCallback.set_i2c_err(sma1303->dev, ret);
287cf116194f9c Kiseok Jo 2023-01-04 290 } else
287cf116194f9c Kiseok Jo 2023-01-04 291 break;
0b15568ccfb962 Kiseok Jo 2023-01-04 292 }
287cf116194f9c Kiseok Jo 2023-01-04 @293 return ret;
0b15568ccfb962 Kiseok Jo 2023-01-04 294 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
More information about the Alsa-devel
mailing list