Staging: brcm80211: make interface name buffer smaller
authorDan Carpenter <error27@gmail.com>
Sat, 9 Oct 2010 11:54:06 +0000 (13:54 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sat, 9 Oct 2010 20:49:40 +0000 (13:49 -0700)
In the original code the interface name was IFNAMSIZ + 1, but that
caused problems in dhd_ifname2idx() which does:
strncmp(dhd->iflist[i]->name, name, IFNAMSIZ)

The wl_event_msg_t struct can only store 16 character names as well.

And thirdly there is a potential buffer overflow in dhd_op_if() because
if->net->name is IFNAMSIZ and we do:
strcpy(ifp->net->name, ifp->name);

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmfmac/dhd_linux.c

index 0088d8ad9990f44e295bff6b4fec1115b362567b..f98049b17af79c33a4192c0c701dae0c3d41adc9 100644 (file)
@@ -217,7 +217,7 @@ typedef struct dhd_if {
        u8 mac_addr[ETHER_ADDR_LEN];    /* assigned MAC address */
        bool attached;          /* Delayed attachment when unset */
        bool txflowcontrol;     /* Per interface flow control indicator */
-       char name[IFNAMSIZ + 1];        /* linux interface name */
+       char name[IFNAMSIZ];    /* linux interface name */
 } dhd_if_t;
 
 /* Local private structure (extension of pub) */
@@ -1871,8 +1871,7 @@ dhd_add_if(dhd_info_t *dhd, int ifidx, void *handle, char *name,
        memset(ifp, 0, sizeof(dhd_if_t));
        ifp->info = dhd;
        dhd->iflist[ifidx] = ifp;
-       strncpy(ifp->name, name, IFNAMSIZ);
-       ifp->name[IFNAMSIZ] = '\0';
+       strlcpy(ifp->name, name, IFNAMSIZ);
        if (mac_addr != NULL)
                memcpy(&ifp->mac_addr, mac_addr, ETHER_ADDR_LEN);