bna: adjust 'name' buf size of bna_tcb and bna_ccb structures
authorAlexey Kodanev <aleksei.kodanev@bell-sw.com>
Mon, 8 Jul 2024 10:50:08 +0000 (10:50 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 12 Jul 2024 00:56:48 +0000 (01:56 +0100)
To have enough space to write all possible sprintf() args. Currently
'name' size is 16, but the first '%s' specifier may already need at
least 16 characters, since 'bnad->netdev->name' is used there.

For '%d' specifiers, assume that they require:
 * 1 char for 'tx_id + tx_info->tcb[i]->id' sum, BNAD_MAX_TXQ_PER_TX is 8
 * 2 chars for 'rx_id + rx_info->rx_ctrl[i].ccb->id', BNAD_MAX_RXP_PER_RX
   is 16

And replace sprintf with snprintf.

Detected using the static analysis tool - Svace.

Fixes: 8b230ed8ec96 ("bna: Brocade 10Gb Ethernet device driver")
Signed-off-by: Alexey Kodanev <aleksei.kodanev@bell-sw.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/brocade/bna/bna_types.h
drivers/net/ethernet/brocade/bna/bnad.c

index a5ebd7110e07362f7c552f622bef22c1577f85ab..986f43d277119d09efd4492c690d65e96c13db78 100644 (file)
@@ -416,7 +416,7 @@ struct bna_ib {
 /* Tx object */
 
 /* Tx datapath control structure */
-#define BNA_Q_NAME_SIZE                16
+#define BNA_Q_NAME_SIZE                (IFNAMSIZ + 6)
 struct bna_tcb {
        /* Fast path */
        void                    **sw_qpt;
index fe121d36112d5bcdb7f450be2622d174bf8b1ebe..ece6f3b483273832bc2fd0fe611e4bab15843ff6 100644 (file)
@@ -1534,8 +1534,9 @@ bnad_tx_msix_register(struct bnad *bnad, struct bnad_tx_info *tx_info,
 
        for (i = 0; i < num_txqs; i++) {
                vector_num = tx_info->tcb[i]->intr_vector;
-               sprintf(tx_info->tcb[i]->name, "%s TXQ %d", bnad->netdev->name,
-                               tx_id + tx_info->tcb[i]->id);
+               snprintf(tx_info->tcb[i]->name, BNA_Q_NAME_SIZE, "%s TXQ %d",
+                        bnad->netdev->name,
+                        tx_id + tx_info->tcb[i]->id);
                err = request_irq(bnad->msix_table[vector_num].vector,
                                  (irq_handler_t)bnad_msix_tx, 0,
                                  tx_info->tcb[i]->name,
@@ -1585,9 +1586,9 @@ bnad_rx_msix_register(struct bnad *bnad, struct bnad_rx_info *rx_info,
 
        for (i = 0; i < num_rxps; i++) {
                vector_num = rx_info->rx_ctrl[i].ccb->intr_vector;
-               sprintf(rx_info->rx_ctrl[i].ccb->name, "%s CQ %d",
-                       bnad->netdev->name,
-                       rx_id + rx_info->rx_ctrl[i].ccb->id);
+               snprintf(rx_info->rx_ctrl[i].ccb->name, BNA_Q_NAME_SIZE,
+                        "%s CQ %d", bnad->netdev->name,
+                        rx_id + rx_info->rx_ctrl[i].ccb->id);
                err = request_irq(bnad->msix_table[vector_num].vector,
                                  (irq_handler_t)bnad_msix_rx, 0,
                                  rx_info->rx_ctrl[i].ccb->name,