[alsa-devel] Question about ASOC codec drivers
Neil Jones
neiljay at gmail.com
Thu Jan 20 17:12:12 CET 2011
> ...is exactly what you told the driver to do. You've told the core
> there are seven items in the enumeration so it's expecting an array of
> seven strings.
DUH! sorry, in my head i read .xmax as .xmask cheers for the spot.
I still get 'Failed to add route Line Input->Input Mux' though ?
> Ideally if you think there's a change that should be
> made please post a patch.
From: Neil Jones <neiljay at gmail.com>
Date: Thu, 20 Jan 2011 15:59:38 +0000
Subject: [PATCH] sound/soc: change potentially risky strcpy to strncpy.
Signed-off-by: Neil Jones <neiljay at gmail.com>
---
include/sound/asound.h | 11 +++++++----
sound/soc/soc-core.c | 5 +++--
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/include/sound/asound.h b/include/sound/asound.h
index a1803ec..f694604 100644
--- a/include/sound/asound.h
+++ b/include/sound/asound.h
@@ -761,6 +761,8 @@ typedef int __bitwise snd_ctl_elem_iface_t;
#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000)
/* Off, with power */
#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001)
/* Off, without power */
+#define SNDRV_CTL_ELEMENT_INFO_NAME_LENGTH 64
+
struct snd_ctl_elem_id {
unsigned int numid; /* numeric identifier, zero = invalid */
snd_ctl_elem_iface_t iface; /* interface identifier */
@@ -799,7 +801,8 @@ struct snd_ctl_elem_info {
struct {
unsigned int items; /* R: number of items */
unsigned int item; /* W: item number */
- char name[64]; /* R: value name */
+ /* R: value name */
+ char name[SNDRV_CTL_ELEMENT_INFO_NAME_LENGTH];
} enumerated;
unsigned char reserved[128];
} value;
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 85b7d54..3ad3361 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2056,8 +2056,9 @@ int snd_soc_info_enum_double(struct snd_kcontrol
*kcontrol,
if (uinfo->value.enumerated.item > e->max - 1)
uinfo->value.enumerated.item = e->max - 1;
- strcpy(uinfo->value.enumerated.name,
- e->texts[uinfo->value.enumerated.item]);
+ strncpy(uinfo->value.enumerated.name,
+ e->texts[uinfo->value.enumerated.item],
+ SNDRV_CTL_ELEMENT_INFO_NAME_LENGTH);
return 0;
}
EXPORT_SYMBOL_GPL(snd_soc_info_enum_double);
--
1.5.5.2
On Tue, Jan 18, 2011 at 7:19 PM, Mark Brown
<broonie at opensource.wolfsonmicro.com> wrote:
> On Tue, Jan 18, 2011 at 05:35:22PM +0000, Neil Jones wrote:
>
>> tansen_input_select[] array of strings which only has 3 entries, so it
>> blows up (e->max = 7??).
>
> This...
>
>> also shouldn't the strcpy by a strncpy as we are copying to a fixed
>> 64byte buffer ?
>
> There's rather a lot of strcpy() calls in the kernel; perhaps you could
> be more specific? Ideally if you think there's a change that should be
> made please post a patch.
>
>> static const struct soc_enum tansen_ip_enum =
>> SOC_ENUM_SINGLE(TANSEN_TM_IP_TOP2, 4, 0x7, tansen_input_select);
>
> ...is exactly what you told the driver to do. You've told the core
> there are seven items in the enumeration so it's expecting an array of
> seven strings.
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
>
More information about the Alsa-devel
mailing list