Commit bc044ae9 authored by Kees Cook's avatar Kees Cook Committed by Jakub Kicinski

cxgb3: Avoid potential string truncation in desc

Builds with W=1 were warning about potential string truncations:

drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c: In function 'cxgb_up':
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c:394:38: warning: '%d' directive output may be truncated writing between 1 and 11 bytes into a region of size between 5 and 20 [-Wformat-truncation=]
  394 |                                  "%s-%d", d->name, pi->first_qset + i);
      |                                      ^~
In function 'name_msix_vecs',
    inlined from 'cxgb_up' at drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c:1264:3: drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c:394:34: note: directive argument in the range [-2147483641, 509]
  394 |                                  "%s-%d", d->name, pi->first_qset + i);
      |                                  ^~~~~~~
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c:393:25: note: 'snprintf' output between 3 and 28 bytes into a destination of size 21
  393 |                         snprintf(adap->msix_info[msi_idx].desc, n,
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  394 |                                  "%s-%d", d->name, pi->first_qset + i);
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avoid open-coded %NUL-termination (this code was assuming snprintf
wasn't %NUL terminating when it does -- likely thinking of strncpy),
and grow the size of the string to handle a maximal value.
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202312100937.ZPZCARhB-lkp@intel.com/
Cc: Raju Rangoju <rajur@chelsio.com>
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20231212220954.work.219-kees@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 84cc9919
...@@ -237,7 +237,7 @@ struct adapter { ...@@ -237,7 +237,7 @@ struct adapter {
int msix_nvectors; int msix_nvectors;
struct { struct {
unsigned short vec; unsigned short vec;
char desc[22]; char desc[IFNAMSIZ + 1 + 12]; /* Needs space for "%s-%d" */
} msix_info[SGE_QSETS + 1]; } msix_info[SGE_QSETS + 1];
/* T3 modules */ /* T3 modules */
......
...@@ -380,19 +380,18 @@ static irqreturn_t t3_async_intr_handler(int irq, void *cookie) ...@@ -380,19 +380,18 @@ static irqreturn_t t3_async_intr_handler(int irq, void *cookie)
*/ */
static void name_msix_vecs(struct adapter *adap) static void name_msix_vecs(struct adapter *adap)
{ {
int i, j, msi_idx = 1, n = sizeof(adap->msix_info[0].desc) - 1; int i, j, msi_idx = 1;
snprintf(adap->msix_info[0].desc, n, "%s", adap->name); strscpy(adap->msix_info[0].desc, adap->name, sizeof(adap->msix_info[0].desc));
adap->msix_info[0].desc[n] = 0;
for_each_port(adap, j) { for_each_port(adap, j) {
struct net_device *d = adap->port[j]; struct net_device *d = adap->port[j];
const struct port_info *pi = netdev_priv(d); const struct port_info *pi = netdev_priv(d);
for (i = 0; i < pi->nqsets; i++, msi_idx++) { for (i = 0; i < pi->nqsets; i++, msi_idx++) {
snprintf(adap->msix_info[msi_idx].desc, n, snprintf(adap->msix_info[msi_idx].desc,
sizeof(adap->msix_info[0].desc),
"%s-%d", d->name, pi->first_qset + i); "%s-%d", d->name, pi->first_qset + i);
adap->msix_info[msi_idx].desc[n] = 0;
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment