diff options
author | Jamie Iles <quic_jiles@quicinc.com> | 2022-03-08 14:42:26 +0100 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@bootlin.com> | 2022-03-08 22:33:52 +0100 |
commit | 6cbf8b38dfe3aabe330f2c356949bc4d6a1f034f (patch) | |
tree | 19b3ed506b30dbf64a4bde142fb9ace89b1c0e4d /drivers/i3c | |
parent | i3c: support dynamically added i2c devices (diff) | |
download | linux-6cbf8b38dfe3aabe330f2c356949bc4d6a1f034f.tar.xz linux-6cbf8b38dfe3aabe330f2c356949bc4d6a1f034f.zip |
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
Diffstat (limited to 'drivers/i3c')
-rw-r--r-- | drivers/i3c/master.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c index 6cacbca8cdd0..7850287dfe7a 100644 --- a/drivers/i3c/master.c +++ b/drivers/i3c/master.c @@ -2307,8 +2307,13 @@ static int i3c_master_i2c_adapter_init(struct i3c_master_controller *master) * We silently ignore failures here. The bus should keep working * correctly even if one or more i2c devices are not registered. */ - list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) + list_for_each_entry(i2cboardinfo, &master->boardinfo.i2c, node) { + i2cdev = i3c_master_find_i2c_dev_by_addr(master, + i2cboardinfo->base.addr); + if (WARN_ON(!i2cdev)) + continue; i2cdev->dev = i2c_new_client_device(adap, &i2cboardinfo->base); + } return 0; } |