--- prism2.c.orig Tue Apr 23 23:04:04 2002 +++ prism2.c Tue Apr 23 23:06:06 2002 @@ -65,7 +65,13 @@ static struct semaphore rtnl_sem = MUTEX; #define rtnl_shlock_nowait() down_trylock(&rtnl_sem) #endif +#define PRISM2_NETDEV_EXTRA IFNAMSIZ +#define prism2_set_dev_name(dev, pos) (dev)->name = (char *) (pos) /* end 2.2 compatibility */ +#else /* kernel < 2.4.0 */ +/* no extra space needed for 2.4.x net_device */ +#define PRISM2_NETDEV_EXTRA 0 +#define prism2_set_dev_name(dev, pos) do { } while (0) #endif /* kernel < 2.4.0 */ @@ -2607,11 +2613,13 @@ int prism2_wds_add(local_info_t *local, return -EINVAL; } - wds = (prism2_wds_info_t *) kmalloc(sizeof(*wds), GFP_ATOMIC); + wds = (prism2_wds_info_t *) kmalloc(sizeof(*wds) + PRISM2_NETDEV_EXTRA, + GFP_ATOMIC); if (wds == NULL) return -ENOMEM; - memset(wds, 0, sizeof(*wds)); + memset(wds, 0, sizeof(*wds) + PRISM2_NETDEV_EXTRA); + prism2_set_dev_name(&wds->dev, wds + 1); memcpy(wds->remote_addr, remote_addr, ETH_ALEN); @@ -3193,13 +3201,21 @@ local_info_t *prism2_init_local_data(str memset(local->ap, 0, sizeof(struct ap_data)); #ifdef PRISM2_HOSTAPD - local->apdev = kmalloc(sizeof(struct net_device), GFP_KERNEL); + local->apdev = kmalloc(sizeof(struct net_device) + PRISM2_NETDEV_EXTRA, + GFP_KERNEL); if (local->apdev == NULL) goto fail; + memset(local->apdev, 0, sizeof(struct net_device) + + PRISM2_NETDEV_EXTRA); + prism2_set_dev_name(local->apdev, local->apdev + 1); #endif /* PRISM2_HOSTAPD */ - local->dev = kmalloc(sizeof(struct net_device), GFP_KERNEL); - memset(local->dev, 0, sizeof(struct net_device)); + local->dev = kmalloc(sizeof(struct net_device) + PRISM2_NETDEV_EXTRA, + GFP_KERNEL); + if (local->dev == NULL) + goto fail; + memset(local->dev, 0, sizeof(struct net_device) + PRISM2_NETDEV_EXTRA); + prism2_set_dev_name(local->dev, local->dev + 1); local->dev->priv = local; local->func = funcs; @@ -3241,7 +3257,6 @@ local_info_t *prism2_init_local_data(str prism2_setup_dev(local->dev, local, 1); #ifdef PRISM2_HOSTAPD - memset(local->apdev, 0, sizeof(struct net_device)); local->apdev->priv = local; prism2_setup_dev(local->apdev, local, 0); local->apdev->hard_start_xmit = prism2_tx_80211;