ALSA: ad1848: fix format string overflow warning
The snd_pcm name is too long to fit into the card shortname or a part of the longname: sound/isa/ad1848/ad1848.c: In function 'snd_ad1848_probe': sound/isa/ad1848/ad1848.c:116:26: error: ' at 0x' directive writing 6 bytes into a region of size between 1 and 80 [-Werror=format-overflow=] sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/isa/ad1848/ad1848.c:116:2: note: 'sprintf' output between 22 and 128 bytes into a destination of size 80 sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ chip->pcm->name, chip->port, irq[n], dma1[n]); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This changes the code to use length-checking functions that truncate if necessary. The "[Thinkpad]" substring is now also part of the snprintf(), as that could also overflow the buffer. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
6d8b04de87
commit
003d3e70db
|
@ -110,13 +110,17 @@ static int snd_ad1848_probe(struct device *dev, unsigned int n)
|
|||
if (error < 0)
|
||||
goto out;
|
||||
|
||||
strcpy(card->driver, "AD1848");
|
||||
strcpy(card->shortname, chip->pcm->name);
|
||||
strlcpy(card->driver, "AD1848", sizeof(card->driver));
|
||||
strlcpy(card->shortname, chip->pcm->name, sizeof(card->shortname));
|
||||
|
||||
sprintf(card->longname, "%s at 0x%lx, irq %d, dma %d",
|
||||
if (!thinkpad[n])
|
||||
snprintf(card->longname, sizeof(card->longname),
|
||||
"%s at 0x%lx, irq %d, dma %d",
|
||||
chip->pcm->name, chip->port, irq[n], dma1[n]);
|
||||
else
|
||||
snprintf(card->longname, sizeof(card->longname),
|
||||
"%s at 0x%lx, irq %d, dma %d [Thinkpad]",
|
||||
chip->pcm->name, chip->port, irq[n], dma1[n]);
|
||||
if (thinkpad[n])
|
||||
strcat(card->longname, " [Thinkpad]");
|
||||
|
||||
error = snd_card_register(card);
|
||||
if (error < 0)
|
||||
|
|
Loading…
Reference in New Issue