[PATCH alsa-lib 1/8] topology: decode: fix channel map memory allocation
Piotr Maziarz
piotrx.maziarz at linux.intel.com
Thu Jun 25 13:03:39 CEST 2020
Without proper memory allocation behaviour was undefined.
Signed-off-by: Piotr Maziarz <piotrx.maziarz at linux.intel.com>
---
src/topology/ctl.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
index 90241b6..c8c7e94 100644
--- a/src/topology/ctl.c
+++ b/src/topology/ctl.c
@@ -1330,7 +1330,6 @@ int tplg_decode_control_enum1(snd_tplg_t *tplg,
void *bin, size_t size)
{
struct snd_soc_tplg_enum_control *ec = bin;
- struct snd_tplg_channel_map_template cmt;
int i;
if (size < sizeof(*ec)) {
@@ -1375,11 +1374,11 @@ int tplg_decode_control_enum1(snd_tplg_t *tplg,
}
}
- et->map = &cmt;
- memset(&cmt, 0, sizeof(cmt));
- cmt.num_channels = ec->num_channels;
- for (i = 0; i < cmt.num_channels; i++) {
- struct snd_tplg_channel_elem *channel = &cmt.channel[i];
+ et->map = tplg_calloc(heap, sizeof(struct snd_tplg_channel_map_template));
+ et->map->num_channels = ec->num_channels;
+ for (i = 0; i < et->map->num_channels; i++) {
+ struct snd_tplg_channel_elem *channel = &et->map->channel[i];
+
tplg_log(tplg, 'D', pos + ((void *)&ec->channel[i] - (void *)ec),
"enum: channel size %d", ec->channel[i].size);
channel->reg = ec->channel[i].reg;
--
2.7.4
More information about the Alsa-devel
mailing list