mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 07:31:45 +00:00
ASoC: Intel: Skylake: Fix uuid_module memory leak in failure case
In the loop that adds the uuid_module to the uuid_list list, allocated memory is not properly freed in the error path free uuid_list whenever any of the memory allocation in the loop fails to avoid memory leak. Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com> Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com> Acked-By: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
0265ddd7b7
commit
f8e0665211
@ -251,6 +251,7 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
struct uuid_module *module;
|
||||
struct firmware stripped_fw;
|
||||
unsigned int safe_file;
|
||||
int ret = 0;
|
||||
|
||||
/* Get the FW pointer to derive ADSP header */
|
||||
stripped_fw.data = fw->data;
|
||||
@ -299,8 +300,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
|
||||
for (i = 0; i < num_entry; i++, mod_entry++) {
|
||||
module = kzalloc(sizeof(*module), GFP_KERNEL);
|
||||
if (!module)
|
||||
return -ENOMEM;
|
||||
if (!module) {
|
||||
ret = -ENOMEM;
|
||||
goto free_uuid_list;
|
||||
}
|
||||
|
||||
uuid_bin = (uuid_le *)mod_entry->uuid.id;
|
||||
memcpy(&module->uuid, uuid_bin, sizeof(module->uuid));
|
||||
@ -311,8 +314,8 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
size = sizeof(int) * mod_entry->instance_max_count;
|
||||
module->instance_id = devm_kzalloc(ctx->dev, size, GFP_KERNEL);
|
||||
if (!module->instance_id) {
|
||||
kfree(module);
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto free_uuid_list;
|
||||
}
|
||||
|
||||
list_add_tail(&module->list, &skl->uuid_list);
|
||||
@ -323,6 +326,10 @@ int snd_skl_parse_uuids(struct sst_dsp *ctx, const struct firmware *fw,
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
free_uuid_list:
|
||||
skl_freeup_uuid_list(skl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void skl_freeup_uuid_list(struct skl_sst *ctx)
|
||||
|
Loading…
Reference in New Issue
Block a user