ASoC: sst_platform: initialize module_name properly
PATCH 1/4 ASoC: sst_platform: initialize module_name properly
module_name will be checked in register_sst_card. It will fail to register sst card if it's not initialized.
Signed-off-by Lu Guanqun <[email protected]>
--- sound/soc/mid-x86/sst_platform.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +1 -0
@@ -247,6 +247,7 @@ static int sst_platform_open(struct snd_pcm_substream *substream)return -ENOMEM ; } stream->sstdrv_ops->vendor_id =MSIC_VENDOR_ID ; + stream->sstdrv_ops->module_name =SST_CARD_NAMES ;/* registering with SST driver to get access to SST APIs to use */ ret_val =register_sst_card (stream->sstdrv_ops);if (ret_val) {
PATCH 2/4 ASoC: sst_platform: free the resources on fail path
Signed-off-by Lu Guanqun <[email protected]>
--- sound/soc/mid-x86/sst_platform.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +2 -0
@@ -252,6 +252,8 @@ static int sst_platform_open(struct snd_pcm_substream *substream) ret_val =register_sst_card (stream->sstdrv_ops);if (ret_val) {pr_err ("sst: sst card registration failed\n" ); +kfree (stream->sstdrv_ops); +kfree (stream);return ret_val; } runtime->private_data = stream;
PATCH 3/4 ASoC: sst_platform: unregister sst card when being closed
In reply to Lu GuanqunSigned-off-by Lu Guanqun <[email protected]>
--- sound/soc/mid-x86/sst_platform.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
sound/soc/mid-x86/sst_platform.c +1 -0
@@ -271,6 +271,7 @@ static int sst_platform_close(struct snd_pcm_substream *substream) str_id = stream->stream_info.str_id;if (str_id) ret_val = stream->sstdrv_ops->pcm_control->close (str_id); +unregister_sst_card (stream->sstdrv_ops);kfree (stream->sstdrv_ops);kfree (stream);return ret_val;
PATCH 4/4 sst: make register_sst_card more self-contained
In reply to Lu GuanqunFrom: Lu Guanqun <[email protected]>
register_sst_card is used in ASoC code with field scard_ops being NULL. Without this patch, there will be NULL dereference.
Signed-off-by Lu Guanqun <[email protected]>
--- .../staging/intel_sst/intel_sst_drv_interface.c | 1 - drivers/staging/intel_sst/intelmid.c | 1 + 2 files changed, 1 insertions(+), 1 deletions(-)
drivers/staging/intel_sst/intel_sst_drv_interface.c +0 -1
@@ -508,7 +508,6 @@ int register_sst_card(struct intel_sst_card_ops *card) sst_drv_ctx->pmic_state =SND_MAD_INIT_DONE ; sst_drv_ctx->rx_time_slot_status =0 ;/*default AMIC*/ card->pcm_control = sst_pmic_ops.pcm_control; - sst_drv_ctx->scard_ops->card_status =SND_CARD_UN_INIT ;return 0 ; }else {pr_err ("strcmp fail %s\n" , card->module_name);
drivers/staging/intel_sst/intelmid.c +1 -0
@@ -802,6 +802,7 @@ static int __devinit snd_intelmad_sst_register(pr_err ("sst card registration failed\n" );return ret_val; } + sst_drv_ctx->scard_ops->card_status =SND_CARD_UN_INIT ; sst_card_vendor_id = intelmaddata->sstdrv_ops->vendor_id; intelmaddata->pmic_status =PMIC_UNINIT ;
Mark Brown
AppliedQuoted 4 lines · Lu Guanqun
module_namewill be checked inregister_sst_card. It will fail to register sst card if it's not initialized.Signed-off-by Lu Guanqun <[email protected]>
Applied all, thanks.