Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: als100: fix format string overflow warning

The compiler sees that the format string might overflow for the longname:

sound/isa/als100.c: In function 'snd_als100_pnp_detect':
sound/isa/als100.c:225:27: error: ', dma ' directive writing 6 bytes into a region of size between 0 and 64 [-Werror=format-overflow=]
sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d",
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/isa/als100.c:225:3: note: 'sprintf' output between 24 and 113 bytes into a destination of size 80
sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d",

Open-coding "shortname" here gets us below the limit, and using
snprintf() is a good idea too.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Arnd Bergmann and committed by
Takashi Iwai
8a463639 610e1ae9

+7 -6
+7 -6
sound/isa/als100.c
··· 222 222 if (pid->driver_data == SB_HW_DT019X) { 223 223 strcpy(card->driver, "DT-019X"); 224 224 strcpy(card->shortname, "Diamond Tech. DT-019X"); 225 - sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d", 226 - card->shortname, chip->name, chip->port, 227 - irq[dev], dma8[dev]); 225 + snprintf(card->longname, sizeof(card->longname), 226 + "Diamond Tech. DT-019X, %s at 0x%lx, irq %d, dma %d", 227 + chip->name, chip->port, irq[dev], dma8[dev]); 228 228 } else { 229 229 strcpy(card->driver, "ALS100"); 230 230 strcpy(card->shortname, "Avance Logic ALS100"); 231 - sprintf(card->longname, "%s, %s at 0x%lx, irq %d, dma %d&%d", 232 - card->shortname, chip->name, chip->port, 233 - irq[dev], dma8[dev], dma16[dev]); 231 + snprintf(card->longname, sizeof(card->longname), 232 + "Avance Logic ALS100, %s at 0x%lx, irq %d, dma %d&%d", 233 + chip->name, chip->port, irq[dev], dma8[dev], 234 + dma16[dev]); 234 235 } 235 236 236 237 if ((error = snd_sb16dsp_pcm(chip, 0)) < 0) {