Re: [alsa-devel] [PATCH v2] ASoC: Intel: Skylake: prevent memory leak in snd_skl_parse_uuids

2019-09-27 Thread Pierre-Louis Bossart

On 9/27/19 3:39 PM, Andy Shevchenko wrote:

On Fri, Sep 27, 2019 at 7:39 PM Pierre-Louis Bossart
 wrote:

The problem with solution #1 is freeing orphaned pointer. It will work,
but it's simple is not okay from object life time prospective.


?? I don't get your point at all Andy.
Two allocations happens in a loop and if the second fails, you free the
first and then jump to free everything allocated in the previous
iterations. what am I missing?


Two things:
  - one allocation is done with kzalloc(), while the other one with
devm_kcalloc()
  - due to above the ordering of resources is reversed


Ah yes, I see your point now, sorry for being thick.
Indeed it'd make sense to use devm_ for both allocations, but then the 
kfree needs to be removed in the error handling.




Re: [alsa-devel] [PATCH v2] ASoC: Intel: Skylake: prevent memory leak in snd_skl_parse_uuids

2019-09-27 Thread Andy Shevchenko
On Fri, Sep 27, 2019 at 7:39 PM Pierre-Louis Bossart
 wrote:
> > The problem with solution #1 is freeing orphaned pointer. It will work,
> > but it's simple is not okay from object life time prospective.
>
> ?? I don't get your point at all Andy.
> Two allocations happens in a loop and if the second fails, you free the
> first and then jump to free everything allocated in the previous
> iterations. what am I missing?

Two things:
 - one allocation is done with kzalloc(), while the other one with
devm_kcalloc()
 - due to above the ordering of resources is reversed

-- 
With Best Regards,
Andy Shevchenko


Re: [alsa-devel] [PATCH v2] ASoC: Intel: Skylake: prevent memory leak in snd_skl_parse_uuids

2019-09-27 Thread Pierre-Louis Bossart





The problem with solution #1 is freeing orphaned pointer. It will work,
but it's simple is not okay from object life time prospective.


?? I don't get your point at all Andy.
Two allocations happens in a loop and if the second fails, you free the 
first and then jump to free everything allocated in the previous 
iterations. what am I missing?