diff mbox

[v3,2/2] topology: Fix the missing referenced elem ptr when merging private data

Message ID 49ac654e701ef70abfc525af3cf48fd87d067596.1469163116.git.mengdong.lin@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

mengdong.lin@linux.intel.com July 22, 2016, 5:12 a.m. UTC
From: Mengdong Lin <mengdong.lin@linux.intel.com>

tplg_copy_data() should set the valid referenced data element pointer
on success. The caller will double check this pointer for all kinds of
references, including controls and data.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>

Comments

Lin, Mengdong July 25, 2016, 2:17 p.m. UTC | #1
Sorry to interrupt you. Does this patch look good now?
This alsa-lib patch is a bug fix without any ABI changes. And it's not part of the other 2 series for BE DAI support.

Thanks
Mengdong

> -----Original Message-----
> From: mengdong.lin@linux.intel.com [mailto:mengdong.lin@linux.intel.com]
> Sent: Friday, July 22, 2016 1:13 PM
> To: alsa-devel@alsa-project.org; broonie@kernel.org
> Cc: tiwai@suse.de; Girdwood, Liam R; Lin, Mengdong; Nc, Shreyas;
> Mengdong Lin
> Subject: [PATCH v3 2/2] topology: Fix the missing referenced elem ptr when
> merging private data
> 
> From: Mengdong Lin <mengdong.lin@linux.intel.com>
> 
> tplg_copy_data() should set the valid referenced data element pointer on
> success. The caller will double check this pointer for all kinds of references,
> including controls and data.
> 
> Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
> 
> diff --git a/src/topology/data.c b/src/topology/data.c index
> 768fc27..4798086 100644
> --- a/src/topology/data.c
> +++ b/src/topology/data.c
> @@ -1053,8 +1053,10 @@ int tplg_copy_data(snd_tplg_t *tplg, struct
> tplg_elem *elem,
> 
>  	tplg_dbg("Data '%s' used by '%s'\n", ref->id, elem->id);
>  	/* overlook empty private data */
> -	if (!ref_elem->data || !ref_elem->data->size)
> +	if (!ref_elem->data || !ref_elem->data->size) {
> +		ref->elem = ref_elem;
>  		return 0;
> +	}
> 
>  	old_priv = get_priv_data(elem);
>  	if (!old_priv)
> @@ -1078,6 +1080,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct
> tplg_elem *elem,
>  	ref_elem->compound_elem = 1;
>  	memcpy(priv->data + old_priv_data_size,
>  	       ref_elem->data->data, priv_data_size);
> +
> +	ref->elem = ref_elem;
>  	return 0;
>  }
> 
> --
> 2.5.0
diff mbox

Patch

diff --git a/src/topology/data.c b/src/topology/data.c
index 768fc27..4798086 100644
--- a/src/topology/data.c
+++ b/src/topology/data.c
@@ -1053,8 +1053,10 @@  int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
 
 	tplg_dbg("Data '%s' used by '%s'\n", ref->id, elem->id);
 	/* overlook empty private data */
-	if (!ref_elem->data || !ref_elem->data->size)
+	if (!ref_elem->data || !ref_elem->data->size) {
+		ref->elem = ref_elem;
 		return 0;
+	}
 
 	old_priv = get_priv_data(elem);
 	if (!old_priv)
@@ -1078,6 +1080,8 @@  int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
 	ref_elem->compound_elem = 1;
 	memcpy(priv->data + old_priv_data_size,
 	       ref_elem->data->data, priv_data_size);
+
+	ref->elem = ref_elem;
 	return 0;
 }