Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i3c: fix uninitialized variable use in i2c setup

Commit 31b9887c7258 ("i3c: remove i2c board info from i2c_dev_desc")
removed the boardinfo from i2c_dev_desc to decouple device enumeration from
setup but did not correctly lookup the i2c_dev_desc to store the new
device, instead dereferencing an uninitialized variable.

Lookup the device that has already been registered by address to store
the i2c client device.

Fixes: 31b9887c7258 ("i3c: remove i2c board info from i2c_dev_desc")
Reported-by: kernel test robot <lkp@intel.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Jamie Iles <quic_jiles@quicinc.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20220308134226.1042367-1-quic_jiles@quicinc.com

authored by

Jamie Iles and committed by
Alexandre Belloni
6cbf8b38 72a4501b

+6 -1
+6 -1
drivers/i3c/master.c
··· 2307 2307 * We silently ignore failures here. The bus should keep working 2308 2308 * correctly even if one or more i2c devices are not registered. 2309 2309 */ 2310 - list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) 2310 + list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { 2311 + i2cdev = i3c_master_find_i2c_dev_by_addr(master, 2312 + i2cboardinfo->base.addr); 2313 + if (WARN_ON(!i2cdev)) 2314 + continue; 2311 2315 i2cdev->dev = i2c_new_client_device(adap, &i2cboardinfo->base); 2316 + } 2312 2317 2313 2318 return 0; 2314 2319 }