Re: [PATCH 1/1] clk: tegra: tegra124-emc: Fix possible memory leak

From: Stephen Boyd
Date: Sun Jun 27 2021 - 21:53:01 EST


Quoting Dmitry Osipenko (2021-06-27 17:29:20)
> 28.06.2021 02:44, Stephen Boyd пишет:
> > Quoting Leizhen (ThunderTown) (2021-06-25 18:32:46)
> >>
> >>
> >> On 2021/6/26 7:31, Stephen Boyd wrote:
> >>> Quoting Zhen Lei (2021-06-17 01:27:59)
> >>>> When krealloc() fails to expand the memory and returns NULL, the original
> >>>> memory is not released. In this case, the original "timings" scale should
> >>>> be maintained.
> >>>>
> >>>> Fixes: 888ca40e2843 ("clk: tegra: emc: Support multiple RAM codes")
>
> The memory is still not released on error and this is not the only one
> place in that code which doesn't release memory on error.
>
> All this code is executed only once during early kernel boot, perhaps
> not really worthwhile fixing it or at least this should be done properly.
>
> >>>> Signed-off-by: Zhen Lei <thunder.leizhen@xxxxxxxxxx>
> >>>> ---
> >>>
> >>> Looks correct, but when does krealloc() return NULL? My read of the
> >>> kerneldoc is that it would return the original memory if the new
> >>> allocation "failed".
> >>
> >> That must be the wrong description in the document. For example, the original
> >
> > Can you fix the kernel doc then?
> >
>
> The doc is clearly saying that it returns NULL, am I missing something?
>
> * Return: pointer to the allocated memory or %NULL in case of error

See the paragraph

* The contents of the object pointed to are preserved up to the
* lesser of the new and old sizes (__GFP_ZERO flag is effectively ignored).

which confused me into thinking the memory that is being reallocated is
guaranteed to be preserved so it would be returned if the larger size
failed. I suppose there's nothing to fix in the kernel-doc, just my
understanding of that paragraph. Maybe it should say

The __GFP_ZERO flag is effectively ignored as the contents of
the objected pointed to @p are preserved up to the lesser of the
@new_size and old size.