gianfar: Fix possible overrun and simplify interrupt name field creation
authorJoe Perches <joe@perches.com>
Sun, 25 Mar 2012 07:10:07 +0000 (07:10 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 25 Mar 2012 17:27:48 +0000 (13:27 -0400)
Space allocated for int_name_<foo> is insufficient for
maximal device name, expand it.

Code to create int_name_<foo> is obscure, simplify it
by using sprintf.

Found by looking for unnecessary \ line continuations.

Signed-off-by: Joe Perches <joe@perches.com>
Tested-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/freescale/gianfar.h

index d9428f0e738a2edf2267055ab1e2008d63d2ff3f..e7bed530399763c9d646f6194f913f530a2bbb52 100644 (file)
@@ -968,7 +968,6 @@ static int gfar_probe(struct platform_device *ofdev)
        struct gfar_private *priv = NULL;
        struct gfar __iomem *regs = NULL;
        int err = 0, i, grp_idx = 0;
-       int len_devname;
        u32 rstat = 0, tstat = 0, rqueue = 0, tqueue = 0;
        u32 isrg = 0;
        u32 __iomem *baddr;
@@ -1169,40 +1168,16 @@ static int gfar_probe(struct platform_device *ofdev)
                priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET);
 
        /* fill out IRQ number and name fields */
-       len_devname = strlen(dev->name);
        for (i = 0; i < priv->num_grps; i++) {
-               strncpy(&priv->gfargrp[i].int_name_tx[0], dev->name,
-                               len_devname);
                if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) {
-                       strncpy(&priv->gfargrp[i].int_name_tx[len_devname],
-                               "_g", sizeof("_g"));
-                       priv->gfargrp[i].int_name_tx[
-                               strlen(priv->gfargrp[i].int_name_tx)] = i+48;
-                       strncpy(&priv->gfargrp[i].int_name_tx[strlen(
-                               priv->gfargrp[i].int_name_tx)],
-                               "_tx", sizeof("_tx") + 1);
-
-                       strncpy(&priv->gfargrp[i].int_name_rx[0], dev->name,
-                                       len_devname);
-                       strncpy(&priv->gfargrp[i].int_name_rx[len_devname],
-                                       "_g", sizeof("_g"));
-                       priv->gfargrp[i].int_name_rx[
-                               strlen(priv->gfargrp[i].int_name_rx)] = i+48;
-                       strncpy(&priv->gfargrp[i].int_name_rx[strlen(
-                               priv->gfargrp[i].int_name_rx)],
-                               "_rx", sizeof("_rx") + 1);
-
-                       strncpy(&priv->gfargrp[i].int_name_er[0], dev->name,
-                                       len_devname);
-                       strncpy(&priv->gfargrp[i].int_name_er[len_devname],
-                               "_g", sizeof("_g"));
-                       priv->gfargrp[i].int_name_er[strlen(
-                                       priv->gfargrp[i].int_name_er)] = i+48;
-                       strncpy(&priv->gfargrp[i].int_name_er[strlen(\
-                               priv->gfargrp[i].int_name_er)],
-                               "_er", sizeof("_er") + 1);
+                       sprintf(priv->gfargrp[i].int_name_tx, "%s%s%c%s",
+                               dev->name, "_g", '0' + i, "_tx");
+                       sprintf(priv->gfargrp[i].int_name_rx, "%s%s%c%s",
+                               dev->name, "_g", '0' + i, "_rx");
+                       sprintf(priv->gfargrp[i].int_name_er, "%s%s%c%s",
+                               dev->name, "_g", '0' + i, "_er");
                } else
-                       priv->gfargrp[i].int_name_tx[len_devname] = '\0';
+                       strcpy(priv->gfargrp[i].int_name_tx, dev->name);
        }
 
        /* Initialize the filer table */
index fc2488adca366f15af3503d582c8251e39812c17..4c9f8d487dbbf4825e10fc2e3ee25199662e7517 100644 (file)
@@ -517,7 +517,7 @@ extern const char gfar_driver_version[];
 #define RXFCB_PERR_MASK                0x000c
 #define RXFCB_PERR_BADL3       0x0008
 
-#define GFAR_INT_NAME_MAX      IFNAMSIZ + 4
+#define GFAR_INT_NAME_MAX      (IFNAMSIZ + 6)  /* '_g#_xx' */
 
 struct txbd8
 {