ALSA: pcxhr: fix string overflow warnings
With gcc-7, we get a warning about a possible string overflow: sound/pci/pcxhr/pcxhr.c: In function 'pcxhr_probe': sound/pci/pcxhr/pcxhr.c:1647:28: error: ' [PCM #' directive writing 7 bytes into a region of size between 1 and 32 [-Werror=format-overflow=] The shortname can simply be removed, and the longname can be changed into a shorter "name" string that is used in three places. Making it a little shorter (40 bytes) avoids the risk of overflowing completely, but I also use snprintf() here for extra clarity. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7ad210ace5
commit
5051735221
|
@ -1165,7 +1165,7 @@ int pcxhr_create_pcm(struct snd_pcxhr *chip)
|
|||
struct snd_pcm *pcm;
|
||||
char name[32];
|
||||
|
||||
sprintf(name, "pcxhr %d", chip->chip_idx);
|
||||
snprintf(name, sizeof(name), "pcxhr %d", chip->chip_idx);
|
||||
if ((err = snd_pcm_new(chip->card, name, 0,
|
||||
chip->nb_streams_play,
|
||||
chip->nb_streams_capt, &pcm)) < 0) {
|
||||
|
@ -1252,7 +1252,7 @@ static void pcxhr_proc_info(struct snd_info_entry *entry,
|
|||
struct snd_pcxhr *chip = entry->private_data;
|
||||
struct pcxhr_mgr *mgr = chip->mgr;
|
||||
|
||||
snd_iprintf(buffer, "\n%s\n", mgr->longname);
|
||||
snd_iprintf(buffer, "\n%s\n", mgr->name);
|
||||
|
||||
/* stats available when embedded DSP is running */
|
||||
if (mgr->dsp_loaded & (1 << PCXHR_FIRMWARE_DSP_MAIN_INDEX)) {
|
||||
|
@ -1339,7 +1339,7 @@ static void pcxhr_proc_sync(struct snd_info_entry *entry,
|
|||
max_clock = PCXHR_CLOCK_TYPE_MAX;
|
||||
}
|
||||
|
||||
snd_iprintf(buffer, "\n%s\n", mgr->longname);
|
||||
snd_iprintf(buffer, "\n%s\n", mgr->name);
|
||||
snd_iprintf(buffer, "Current Sample Clock\t: %s\n",
|
||||
texts[mgr->cur_clock_type]);
|
||||
snd_iprintf(buffer, "Current Sample Rate\t= %d\n",
|
||||
|
@ -1597,10 +1597,9 @@ static int pcxhr_probe(struct pci_dev *pci,
|
|||
}
|
||||
mgr->irq = pci->irq;
|
||||
|
||||
sprintf(mgr->shortname, "Digigram %s", card_name);
|
||||
sprintf(mgr->longname, "%s at 0x%lx & 0x%lx, 0x%lx irq %i",
|
||||
mgr->shortname,
|
||||
mgr->port[0], mgr->port[1], mgr->port[2], mgr->irq);
|
||||
snprintf(mgr->name, sizeof(mgr->name),
|
||||
"Digigram at 0x%lx & 0x%lx, 0x%lx irq %i",
|
||||
mgr->port[0], mgr->port[1], mgr->port[2], mgr->irq);
|
||||
|
||||
/* ISR lock */
|
||||
mutex_init(&mgr->lock);
|
||||
|
@ -1644,8 +1643,10 @@ static int pcxhr_probe(struct pci_dev *pci,
|
|||
}
|
||||
|
||||
strcpy(card->driver, DRIVER_NAME);
|
||||
sprintf(card->shortname, "%s [PCM #%d]", mgr->shortname, i);
|
||||
sprintf(card->longname, "%s [PCM #%d]", mgr->longname, i);
|
||||
snprintf(card->shortname, sizeof(card->shortname),
|
||||
"Digigram [PCM #%d]", i);
|
||||
snprintf(card->longname, sizeof(card->longname),
|
||||
"%s [PCM #%d]", mgr->name, i);
|
||||
|
||||
if ((err = pcxhr_create(mgr, card, i)) < 0) {
|
||||
snd_card_free(card);
|
||||
|
|
|
@ -75,8 +75,7 @@ struct pcxhr_mgr {
|
|||
unsigned long port[3];
|
||||
|
||||
/* share the name */
|
||||
char shortname[32]; /* short name of this soundcard */
|
||||
char longname[96]; /* name of this soundcard */
|
||||
char name[40]; /* name of this soundcard */
|
||||
|
||||
struct pcxhr_rmh *prmh;
|
||||
|
||||
|
|
Loading…
Reference in New Issue