ALSA: mixart: fix string overflow warning
authorArnd Bergmann <arnd@arndb.de>
Tue, 18 Jul 2017 11:48:08 +0000 (13:48 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 18 Jul 2017 15:54:17 +0000 (17:54 +0200)
Using a temporary string produces warnings about a possible overflow
in sprintf:

sound/pci/mixart/mixart.c: In function 'snd_mixart_probe':
sound/pci/mixart/mixart.c:1353:28: error: ' [PCM #' directive writing 7 bytes into a region of size between 1 and 32 [-Werror=format-overflow=]
   sprintf(card->shortname, "%s [PCM #%d]", mgr->shortname, i);
                            ^~~~~~~~~~~~~~
sound/pci/mixart/mixart.c:1353:28: note: using the range [-21474836482147483647] for directive argument
sound/pci/mixart/mixart.c:1353:3: note: 'sprintf' output between 10 and 51 bytes into a destination of size 32
   sprintf(card->shortname, "%s [PCM #%d]", mgr->shortname, i);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sound/pci/mixart/mixart.c:1354:27: error: ' [PCM #' directive writing 7 bytes into a region of size between 1 and 80 [-Werror=format-overflow=]
   sprintf(card->longname, "%s [PCM #%d]", mgr->longname, i);
                           ^~~~~~~~~~~~~~
sound/pci/mixart/mixart.c:1354:27: note: using the range [-21474836482147483647] for directive argument
sound/pci/mixart/mixart.c:1354:3: note: 'sprintf' output between 10 and 99 bytes into a destination of size 80

Skipping the intermediate, we can get gcc to see that it is in fact
safe here.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/mixart/mixart.c
sound/pci/mixart/mixart.h

index 80d4399..6d7fbf3 100644 (file)
@@ -1313,9 +1313,6 @@ static int snd_mixart_probe(struct pci_dev *pci,
        }
        mgr->irq = pci->irq;
 
-       sprintf(mgr->shortname, "Digigram miXart");
-       sprintf(mgr->longname, "%s at 0x%lx & 0x%lx, irq %i", mgr->shortname, mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq);
-
        /* init mailbox  */
        mgr->msg_fifo_readptr = 0;
        mgr->msg_fifo_writeptr = 0;
@@ -1350,8 +1347,11 @@ static int snd_mixart_probe(struct pci_dev *pci,
                }
 
                strcpy(card->driver, CARD_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 miXart [PCM #%d]", i);
+               snprintf(card->longname, sizeof(card->longname),
+                       "Digigram miXart at 0x%lx & 0x%lx, irq %i [PCM #%d]",
+                       mgr->mem[0].phys, mgr->mem[1].phys, mgr->irq, i);
 
                if ((err = snd_mixart_create(mgr, card, i)) < 0) {
                        snd_card_free(card);
index 4267438..69b3ece 100644 (file)
@@ -74,10 +74,6 @@ struct mixart_mgr {
        /* memory-maps */
        struct mem_area mem[2];
 
-       /* share the name */
-       char shortname[32];         /* short name of this soundcard */
-       char longname[80];          /* name of this soundcard */
-
        /* one and only blocking message or notification may be pending  */
        u32 pending_event;
        wait_queue_head_t msg_sleep;