ASoC: Intel: avs: Fix route override
BugLink: https://bugs.launchpad.net/bugs/2078304 [ Upstream commit fd660b1bd015e5aa9a558ee04088f2431010548d ] Instead of overriding existing memory strings that may be too short, just allocate needed memory and point the route at it. Reported-by: Jason Montleon <jmontleo@redhat.com> Link: https://github.com/thesofproject/avs-topology-xml/issues/22#issuecomment-2127892605 Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com> Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com> Link: https://lore.kernel.org/r/20240603102818.36165-3-amadeuszx.slawinski@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> Signed-off-by: Portia Stephens <portia.stephens@canonical.com> Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
This commit is contained in:
committed by
Stefan Bader
parent
1c2b8b328c
commit
3368904e72
@@ -1421,8 +1421,8 @@ static int avs_route_load(struct snd_soc_component *comp, int index,
|
||||
{
|
||||
struct snd_soc_acpi_mach *mach = dev_get_platdata(comp->card->dev);
|
||||
size_t len = SNDRV_CTL_ELEM_ID_NAME_MAXLEN;
|
||||
char buf[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
|
||||
int ssp_port, tdm_slot;
|
||||
char *buf;
|
||||
|
||||
/* See parse_link_formatted_string() for dynamic naming when(s). */
|
||||
if (!avs_mach_singular_ssp(mach))
|
||||
@@ -1433,13 +1433,24 @@ static int avs_route_load(struct snd_soc_component *comp, int index,
|
||||
return 0;
|
||||
tdm_slot = avs_mach_ssp_tdm(mach, ssp_port);
|
||||
|
||||
buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
avs_ssp_sprint(buf, len, route->source, ssp_port, tdm_slot);
|
||||
strscpy((char *)route->source, buf, len);
|
||||
route->source = buf;
|
||||
|
||||
buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
avs_ssp_sprint(buf, len, route->sink, ssp_port, tdm_slot);
|
||||
strscpy((char *)route->sink, buf, len);
|
||||
route->sink = buf;
|
||||
|
||||
if (route->control) {
|
||||
buf = devm_kzalloc(comp->card->dev, len, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
avs_ssp_sprint(buf, len, route->control, ssp_port, tdm_slot);
|
||||
strscpy((char *)route->control, buf, len);
|
||||
route->control = buf;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user