Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9202c377 authored by Dan Carpenter's avatar Dan Carpenter Committed by Mark Brown
Browse files

ASoC: Baytrail: fix error handling in sst_byt_dsp_init()



Calling "kfree(byt)" is a double free because that was allocated with
devm_kzalloc().  There were a couple places which leak "byt->msg".  That
memory is allocated in msg_empty_list_init().

Fixes: f7d01fd6 ('ASoC: Intel: Add Intel Baytrail SST DSP IPC support')
Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Acked-by: default avatarLiam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent a6cf8f7b
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -796,7 +796,7 @@ int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)

	err = msg_empty_list_init(byt);
	if (err < 0)
		goto list_err;
		return -ENOMEM;

	/* start the IPC message thread */
	init_kthread_worker(&byt->kworker);
@@ -806,7 +806,7 @@ int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)
	if (IS_ERR(byt->tx_thread)) {
		err = PTR_ERR(byt->tx_thread);
		dev_err(byt->dev, "error failed to create message TX task\n");
		goto list_err;
		goto err_free_msg;
	}
	init_kthread_work(&byt->kwork, sst_byt_ipc_tx_msgs);

@@ -816,7 +816,7 @@ int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)
	byt->dsp = sst_dsp_new(dev, &byt_dev, pdata);
	if (byt->dsp == NULL) {
		err = -ENODEV;
		goto list_err;
		goto err_free_msg;
	}

	/* keep the DSP in reset state for base FW loading */
@@ -848,9 +848,9 @@ int sst_byt_dsp_init(struct device *dev, struct sst_pdata *pdata)
	sst_fw_free(byt_sst_fw);
fw_err:
	sst_dsp_free(byt->dsp);
err_free_msg:
	kfree(byt->msg);
list_err:
	kfree(byt);

	return err;
}
EXPORT_SYMBOL_GPL(sst_byt_dsp_init);