ALSA: pcm: add more format names
Subsystems (2)
PATCH 1/1 ALSA: pcm: add more format names
There were some new formats added in commit 15c0cee6c809 "ALSA: pcm:
Define G723 3-bit and 5-bit formats". That commit increased SNDRV_PCM_FORMAT_LAST as well. My concern is that there are a couple places which do:
for (i = 0; i < SNDRV_PCM_FORMAT_LAST; i++) {
if (dummy->pcm_hw.formats & (1ULL << i))
snd_iprintf(buffer, " %s", snd_pcm_format_name(i));
}I haven't tested these but it looks like if "i" were equal to SNDRV_PCM_FORMAT_G723_24 or higher then we might read past the end of the array.
---
Resending because I screwed up the CC lis on my first mail.
sound/core/pcm.c +6 -0
@@ -203,10 +203,16 @@ static char *snd_pcm_format_names[] = {FORMAT (S18_3BE ),FORMAT (U18_3LE ),FORMAT (U18_3BE ), +FORMAT (G723_24 ), +FORMAT (G723_24_1B ), +FORMAT (G723_40 ), + FORMAT(G723_40_1B), };const char *snd_pcm_format_name (snd_pcm_format_t format) { +if (format >=ARRAY_SIZE (snd_pcm_format_names)) +return "Unknown" ;return snd_pcm_format_names[format]; }EXPORT_SYMBOL_GPL (snd_pcm_format_name);
At Fri, 27 Aug 2010 22:02:15 +0200,
Quoted 11 lines · Dan Carpenter
There were some new formats added in commit
15c0cee6c809"ALSA: pcm:
Define G723 3-bit and 5-bit formats". That commit increasedSNDRV_PCM_FORMAT_LASTas well. My concern is that there are a couple places which do:for (i = 0; i < SNDRV_PCM_FORMAT_LAST; i++) { if (dummy->pcm_hw.formats & (1ULL << i)) snd_iprintf(buffer, " %s", snd_pcm_format_name(i)); }
Quoted 7 lines
I haven't tested these but it looks like if "i" were equal to
SNDRV_PCM_FORMAT_G723_24or higher then we might read past the end of the array.Signed-off-by Dan Carpenter <[email protected]>---
Resending because I screwed up the CC lis on my first mail.
Applied now. Thanks.
Takashi
Quoted 23 lines
sound/core/pcm.c +6
-0@@ -203,10 +203,16 @@ static char *snd_pcm_format_names[] = {FORMAT (S18_3BE ),FORMAT (U18_3LE ),FORMAT (U18_3BE ), +FORMAT (G723_24 ), +FORMAT (G723_24_1B ), +FORMAT (G723_40 ), + FORMAT(G723_40_1B), };const char *snd_pcm_format_name (snd_pcm_format_t format) { +if (format >=ARRAY_SIZE (snd_pcm_format_names)) +return "Unknown" ;return snd_pcm_format_names[format]; }EXPORT_SYMBOL_GPL (snd_pcm_format_name);