Messages in this thread | | | Date | Tue, 6 Sep 2022 17:10:50 +0300 | From | Andy Shevchenko <> | Subject | Re: [PATCH v4 06/21] hwmon: (mr75203) fix multi-channel voltage reading |
| |
On Tue, Sep 06, 2022 at 08:33:41AM +0000, Eliav Farber wrote: > Fix voltage allocation and reading to support all channels in all VMs. > Prior to this change allocation and reading were done only for the first > channel in each VM. > This change counts the total number of channels for allocation, and takes > into account the channel offset when reading the sample data register.
...
> + total_ch = ch_num * vm_num; > + in_config = devm_kcalloc(dev, total_ch + 1, > sizeof(*in_config), GFP_KERNEL);
Strictly speaking this should be `size_add(size_mul(...) ...)` construction from overflow.h.
total_ch = size_mul(ch_num, vm_num); in_config = devm_kcalloc(dev, size_add(total_ch, 1), sizeof(*in_config), GFP_KERNEL);
Alternatively before doing all these, add a check
if (array3_size(ch_num, vm_num, sizeof(*in_config)) < SIZE_MAX - sizeof(*in_config)) return -EOVERFLOW;
But this is a bit monstrous. Seems like the above looks and feels better.
Also for backporting purposes perhaps it's fine to do without using those macro helpers.
> if (!in_config) > return -ENOMEM;
-- With Best Regards, Andy Shevchenko
| |