On Tue, Oct 27, 2020 at 11:29 AM Andy Shevchenko <andy.shevchenko@xxxxxxxxx> wrote: > > On Tue, Oct 27, 2020 at 12:04 PM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > On Tue, Oct 27, 2020 at 10:33 AM Andy Shevchenko > > <andy.shevchenko@xxxxxxxxx> wrote: > > > > > > On Mon, Oct 26, 2020 at 4:03 PM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > > > > > > > From: Bartosz Golaszewski <bgolaszewski@xxxxxxxxxxxx> > > > > > > > > We now have devm_krealloc() in the kernel Use it indstead of calling > > > > kfree() and kcalloc() separately. > > > > > > Which is completely lawful when size > previous_size (I mean, the > > > additional patch you sent previously seems not related to this). > > > > > > > Sure but devm_krealloc() is cleaner and adds the benefit of resource management. > > I meant devm_krealloc(). It should work in this case without your > additional "fix" patch. > I know, this is why I sent the fix separately. The fix is still correct on its own. > > > > - kfree(xadc->data); > > > > - xadc->data = kcalloc(n, sizeof(*xadc->data), GFP_KERNEL); > > > > + xadc->data = devm_krealloc(indio_dev->dev.parent, xadc->data, > > > > + n * sizeof(*xadc->data), > > > > > > I think you need to use something from overflow.h instead of explicit > > > multiplication here. > > > > > > > Or maybe add devm_krealloc_array() which would perform the checks > > behind the scenes? > > Maybe. But what to do in the cases when you have struct with flexible > arrays, like > struct foo { > ... > type bar[]; > }; > > ? Just use regular devm_krealloc() with struct_size()? > > And you do kzalloc(sizeof(foo)) followed by krealloc(). The above name > (krealloc_array) may be a bit ambiguous. But devm_krealloc_array() would only be useful for memory allocated by kmalloc_array() or kcalloc(). I don't see what's your point. Bartosz