Thread (24 messages) 24 messages, 5 authors, 2021-04-12

Re: [PATCH v2 4/6] devres: handle zero size in devm_kmalloc()

From: Bartosz Golaszewski <hidden>
Date: 2021-04-12 19:23:21
Also in: linux-hwmon, lkml

On Sun, Apr 11, 2021 at 5:21 AM Dmitry Torokhov
[off-list ref] wrote:
Hi Bartosz,

On Mon, Jun 29, 2020 at 1:56 PM Bartosz Golaszewski [off-list ref] wrote:
quoted
From: Bartosz Golaszewski <redacted>

Make devm_kmalloc() behave similarly to non-managed kmalloc(): return
ZERO_SIZE_PTR when requested size is 0. Update devm_kfree() to handle
this case.
This is wrong if you consider devm_krealloc API that you added. The
premise of devm_krealloc() is that it does not disturb devres "stack",
however in this case there is no entry in the stack. Consider:

        ptr = devm_kzalloc(dev, 0, GFP_KERNEL);
        ...
        more devm API calls
        ...

        /* This allocation will be on top of devm stack, not bottom ! */
        ptr = devm_krealloc(dev, ptr, 16, GFP_KERNEL);

And also:

        ptr = devm_kzalloc(dev, 16, GFP_KERNEL);
        ...
        more devm API calls
        ...
        /* Here we lose out position */
        ptr = devm_krealloc(dev, ptr, 0, GFP_KERNEL);
        ...
        /* and now our memory allocation will be released first */
        ptr = devm_krealloc(dev, ptr, 16, GFP_KERNEL);


IMO special-casing 0-size allocations for managed memory allocations
should not be done.

Thanks.

--
Dmitry
You're right about the ordering being lost. At the same time
allocating 0 bytes is quite a special case and should result in
returning ZERO_SIZE_PTR as the fault dump resulting from its
dereference will indicate what the bug is.

I need to give it a thought because I'm not yet sure what the right
solution would be. Let me get back to you.

Bartosz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help