Message ID | 20190105134427.1022-1-pakki001@umn.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: rt5663: Fix error handling of device_property_read_u32_array | expand |
On Sat, Jan 05, 2019 at 07:44:27AM -0600, Aditya Pakki wrote: > rt5663->imp_table = devm_kzalloc(dev, table_size, GFP_KERNEL); > - device_property_read_u32_array(dev, > + return device_property_read_u32_array(dev, > "realtek,impedance_sensing_table", > (u32 *)rt5663->imp_table, table_size); This is going to silently fail without giving any indication of what's wrong which isn't great - it's not clear that completely failing to load the driver is the best option here, and even if it is we should probably tell the user what went wrong. We're also not checking the result of the memory allocation...
diff --git a/sound/soc/codecs/rt5663.c b/sound/soc/codecs/rt5663.c index da6647015708..2678842d8cd4 100644 --- a/sound/soc/codecs/rt5663.c +++ b/sound/soc/codecs/rt5663.c @@ -3480,7 +3480,7 @@ static int rt5663_parse_dp(struct rt5663_priv *rt5663, struct device *dev) table_size = sizeof(struct impedance_mapping_table) * rt5663->pdata.impedance_sensing_num; rt5663->imp_table = devm_kzalloc(dev, table_size, GFP_KERNEL); - device_property_read_u32_array(dev, + return device_property_read_u32_array(dev, "realtek,impedance_sensing_table", (u32 *)rt5663->imp_table, table_size); } @@ -3507,8 +3507,11 @@ static int rt5663_i2c_probe(struct i2c_client *i2c, if (pdata) rt5663->pdata = *pdata; - else - rt5663_parse_dp(rt5663, &i2c->dev); + else { + ret = rt5663_parse_dp(rt5663, &i2c->dev); + if (ret) + return ret; + } for (i = 0; i < ARRAY_SIZE(rt5663->supplies); i++) rt5663->supplies[i].supply = rt5663_supply_names[i];
In rt5663_parse_dp, the function device_property_read_u32_array() can return an error. This fix adds a check to the latter as well as to the callsite of rt5663_parse_dp in rt5663_i2c_probe. Signed-off-by: Aditya Pakki <pakki001@umn.edu> --- sound/soc/codecs/rt5663.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)