• Nicolin Chen's avatar
    hwmon (ina2xx) Fix NULL id pointer in probe() · de2324a0
    Nicolin Chen authored
    [ Upstream commit 70df9ebb ]
    
    When using DT configurations, the id pointer might turn out to
    be NULL. Then the driver encounters NULL pointer access:
    
      Unable to handle kernel read from unreadable memory at vaddr 00000018
      [...]
      PC is at ina2xx_probe+0x114/0x200
      LR is at ina2xx_probe+0x10c/0x200
      [...]
      Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
    
    The reason is that i2c core returns the id pointer by matching
    id_table with client->name, while the client->name is actually
    using the name from the first string in the DT compatible list,
    not the best one. So i2c core would fail to match the id_table
    if the best matched compatible string isn't the first one, and
    then would return a NULL id pointer.
    
    This probably should be fixed in i2c core. But it doesn't hurt
    to make the driver robust. So this patch fixes it by using the
    "chip" that's added to unify both DT and non-DT configurations.
    
    Additionally, since id pointer could be null, so as id->name:
      ina2xx 10-0047: power monitor (null) (Rshunt = 1000 uOhm)
      ina2xx 10-0048: power monitor (null) (Rshunt = 10000 uOhm)
    
    So this patch also fixes NULL name pointer, using client->name
    to play safe and to align with hwmon->name.
    
    Fixes: bd0ddd4d ("hwmon: (ina2xx) Add OF device ID table")
    Signed-off-by: default avatarNicolin Chen <nicoleotsuka@gmail.com>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    de2324a0
ina2xx.c 13.6 KB