Skip to content

Commit 9c22b4a

Browse files
jarodwilsondavem330
authored andcommitted
net: use core MTU range checking in wireless drivers
- set max_mtu in wil6210 driver - set max_mtu in atmel driver - set min/max_mtu in cisco airo driver, remove airo_change_mtu - set min/max_mtu in ipw2100/ipw2200 drivers, remove libipw_change_mtu - set min/max_mtu in p80211netdev, remove wlan_change_mtu - set min/max_mtu in net/mac80211/iface.c and remove ieee80211_change_mtu - set min/max_mtu in wimax/i2400m and remove i2400m_change_mtu - set min/max_mtu in intersil/hostap and remove prism2_change_mtu - set min/max_mtu in intersil/orinoco - set min/max_mtu in tty/n_gsm and remove gsm_change_mtu CC: netdev@vger.kernel.org CC: linux-wireless@vger.kernel.org CC: Maya Erez <qca_merez@qca.qualcomm.com> CC: Simon Kelley <simon@thekelleys.org.uk> CC: Stanislav Yakovlev <stas.yakovlev@gmail.com> CC: Johannes Berg <johannes@sipsolutions.net> CC: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> Signed-off-by: Jarod Wilson <jarod@redhat.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f77f0ae commit 9c22b4a

File tree

13 files changed

+34
-119
lines changed

13 files changed

+34
-119
lines changed

drivers/net/wimax/i2400m/netdev.c

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -394,25 +394,6 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb,
394394
}
395395

396396

397-
static
398-
int i2400m_change_mtu(struct net_device *net_dev, int new_mtu)
399-
{
400-
int result;
401-
struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
402-
struct device *dev = i2400m_dev(i2400m);
403-
404-
if (new_mtu >= I2400M_MAX_MTU) {
405-
dev_err(dev, "Cannot change MTU to %d (max is %d)\n",
406-
new_mtu, I2400M_MAX_MTU);
407-
result = -EINVAL;
408-
} else {
409-
net_dev->mtu = new_mtu;
410-
result = 0;
411-
}
412-
return result;
413-
}
414-
415-
416397
static
417398
void i2400m_tx_timeout(struct net_device *net_dev)
418399
{
@@ -590,7 +571,6 @@ static const struct net_device_ops i2400m_netdev_ops = {
590571
.ndo_stop = i2400m_stop,
591572
.ndo_start_xmit = i2400m_hard_start_xmit,
592573
.ndo_tx_timeout = i2400m_tx_timeout,
593-
.ndo_change_mtu = i2400m_change_mtu,
594574
};
595575

596576
static void i2400m_get_drvinfo(struct net_device *net_dev,
@@ -621,6 +601,8 @@ void i2400m_netdev_setup(struct net_device *net_dev)
621601
d_fnstart(3, NULL, "(net_dev %p)\n", net_dev);
622602
ether_setup(net_dev);
623603
net_dev->mtu = I2400M_MAX_MTU;
604+
net_dev->min_mtu = 0;
605+
net_dev->max_mtu = I2400M_MAX_MTU;
624606
net_dev->tx_queue_len = I2400M_TX_QLEN;
625607
net_dev->features =
626608
NETIF_F_VLAN_CHALLENGED

drivers/net/wireless/ath/wil6210/netdev.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,21 +41,6 @@ static int wil_stop(struct net_device *ndev)
4141
return wil_down(wil);
4242
}
4343

44-
static int wil_change_mtu(struct net_device *ndev, int new_mtu)
45-
{
46-
struct wil6210_priv *wil = ndev_to_wil(ndev);
47-
48-
if (new_mtu < 68 || new_mtu > mtu_max) {
49-
wil_err(wil, "invalid MTU %d\n", new_mtu);
50-
return -EINVAL;
51-
}
52-
53-
wil_dbg_misc(wil, "change MTU %d -> %d\n", ndev->mtu, new_mtu);
54-
ndev->mtu = new_mtu;
55-
56-
return 0;
57-
}
58-
5944
static int wil_do_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
6045
{
6146
struct wil6210_priv *wil = ndev_to_wil(ndev);
@@ -69,7 +54,6 @@ static const struct net_device_ops wil_netdev_ops = {
6954
.ndo_start_xmit = wil_start_xmit,
7055
.ndo_set_mac_address = eth_mac_addr,
7156
.ndo_validate_addr = eth_validate_addr,
72-
.ndo_change_mtu = wil_change_mtu,
7357
.ndo_do_ioctl = wil_do_ioctl,
7458
};
7559

@@ -126,6 +110,7 @@ static int wil6210_netdev_poll_tx(struct napi_struct *napi, int budget)
126110
static void wil_dev_setup(struct net_device *dev)
127111
{
128112
ether_setup(dev);
113+
dev->max_mtu = mtu_max;
129114
dev->tx_queue_len = WIL_TX_Q_LEN_DEFAULT;
130115
}
131116

drivers/net/wireless/atmel/atmel.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,14 +1295,6 @@ static struct iw_statistics *atmel_get_wireless_stats(struct net_device *dev)
12951295
return &priv->wstats;
12961296
}
12971297

1298-
static int atmel_change_mtu(struct net_device *dev, int new_mtu)
1299-
{
1300-
if ((new_mtu < 68) || (new_mtu > 2312))
1301-
return -EINVAL;
1302-
dev->mtu = new_mtu;
1303-
return 0;
1304-
}
1305-
13061298
static int atmel_set_mac_address(struct net_device *dev, void *p)
13071299
{
13081300
struct sockaddr *addr = p;
@@ -1506,7 +1498,6 @@ static const struct file_operations atmel_proc_fops = {
15061498
static const struct net_device_ops atmel_netdev_ops = {
15071499
.ndo_open = atmel_open,
15081500
.ndo_stop = atmel_close,
1509-
.ndo_change_mtu = atmel_change_mtu,
15101501
.ndo_set_mac_address = atmel_set_mac_address,
15111502
.ndo_start_xmit = start_tx,
15121503
.ndo_do_ioctl = atmel_ioctl,
@@ -1600,6 +1591,10 @@ struct net_device *init_atmel_card(unsigned short irq, unsigned long port,
16001591
dev->irq = irq;
16011592
dev->base_addr = port;
16021593

1594+
/* MTU range: 68 - 2312 */
1595+
dev->min_mtu = 68;
1596+
dev->max_mtu = MAX_WIRELESS_BODY - ETH_FCS_LEN;
1597+
16031598
SET_NETDEV_DEV(dev, sys_dev);
16041599

16051600
if ((rc = request_irq(dev->irq, service_interrupt, IRQF_SHARED, dev->name, dev))) {

drivers/net/wireless/cisco/airo.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2329,14 +2329,6 @@ static int airo_set_mac_address(struct net_device *dev, void *p)
23292329
return 0;
23302330
}
23312331

2332-
static int airo_change_mtu(struct net_device *dev, int new_mtu)
2333-
{
2334-
if ((new_mtu < 68) || (new_mtu > 2400))
2335-
return -EINVAL;
2336-
dev->mtu = new_mtu;
2337-
return 0;
2338-
}
2339-
23402332
static LIST_HEAD(airo_devices);
23412333

23422334
static void add_airo_dev(struct airo_info *ai)
@@ -2656,7 +2648,6 @@ static const struct net_device_ops airo11_netdev_ops = {
26562648
.ndo_get_stats = airo_get_stats,
26572649
.ndo_set_mac_address = airo_set_mac_address,
26582650
.ndo_do_ioctl = airo_ioctl,
2659-
.ndo_change_mtu = airo_change_mtu,
26602651
};
26612652

26622653
static void wifi_setup(struct net_device *dev)
@@ -2668,6 +2659,8 @@ static void wifi_setup(struct net_device *dev)
26682659
dev->type = ARPHRD_IEEE80211;
26692660
dev->hard_header_len = ETH_HLEN;
26702661
dev->mtu = AIRO_DEF_MTU;
2662+
dev->min_mtu = 68;
2663+
dev->max_mtu = MIC_MSGLEN_MAX;
26712664
dev->addr_len = ETH_ALEN;
26722665
dev->tx_queue_len = 100;
26732666

@@ -2754,7 +2747,6 @@ static const struct net_device_ops airo_netdev_ops = {
27542747
.ndo_set_rx_mode = airo_set_multicast_list,
27552748
.ndo_set_mac_address = airo_set_mac_address,
27562749
.ndo_do_ioctl = airo_ioctl,
2757-
.ndo_change_mtu = airo_change_mtu,
27582750
.ndo_validate_addr = eth_validate_addr,
27592751
};
27602752

@@ -2766,7 +2758,6 @@ static const struct net_device_ops mpi_netdev_ops = {
27662758
.ndo_set_rx_mode = airo_set_multicast_list,
27672759
.ndo_set_mac_address = airo_set_mac_address,
27682760
.ndo_do_ioctl = airo_ioctl,
2769-
.ndo_change_mtu = airo_change_mtu,
27702761
.ndo_validate_addr = eth_validate_addr,
27712762
};
27722763

@@ -2822,6 +2813,7 @@ static struct net_device *_init_airo_card( unsigned short irq, int port,
28222813
dev->irq = irq;
28232814
dev->base_addr = port;
28242815
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
2816+
dev->max_mtu = MIC_MSGLEN_MAX;
28252817

28262818
SET_NETDEV_DEV(dev, dmdev);
28272819

drivers/net/wireless/intel/ipw2x00/ipw2100.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6035,7 +6035,6 @@ static const struct net_device_ops ipw2100_netdev_ops = {
60356035
.ndo_open = ipw2100_open,
60366036
.ndo_stop = ipw2100_close,
60376037
.ndo_start_xmit = libipw_xmit,
6038-
.ndo_change_mtu = libipw_change_mtu,
60396038
.ndo_tx_timeout = ipw2100_tx_timeout,
60406039
.ndo_set_mac_address = ipw2100_set_address,
60416040
.ndo_validate_addr = eth_validate_addr,
@@ -6071,6 +6070,8 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
60716070
dev->wireless_data = &priv->wireless_data;
60726071
dev->watchdog_timeo = 3 * HZ;
60736072
dev->irq = 0;
6073+
dev->min_mtu = 68;
6074+
dev->max_mtu = LIBIPW_DATA_LEN;
60746075

60756076
/* NOTE: We don't use the wireless_handlers hook
60766077
* in dev as the system will start throwing WX requests

drivers/net/wireless/intel/ipw2x00/ipw2200.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11561,7 +11561,6 @@ static const struct net_device_ops ipw_prom_netdev_ops = {
1156111561
.ndo_open = ipw_prom_open,
1156211562
.ndo_stop = ipw_prom_stop,
1156311563
.ndo_start_xmit = ipw_prom_hard_start_xmit,
11564-
.ndo_change_mtu = libipw_change_mtu,
1156511564
.ndo_set_mac_address = eth_mac_addr,
1156611565
.ndo_validate_addr = eth_validate_addr,
1156711566
};
@@ -11587,6 +11586,9 @@ static int ipw_prom_alloc(struct ipw_priv *priv)
1158711586
priv->prom_net_dev->type = ARPHRD_IEEE80211_RADIOTAP;
1158811587
priv->prom_net_dev->netdev_ops = &ipw_prom_netdev_ops;
1158911588

11589+
priv->prom_net_dev->min_mtu = 68;
11590+
priv->prom_net_dev->max_mtu = LIBIPW_DATA_LEN;
11591+
1159011592
priv->prom_priv->ieee->iw_mode = IW_MODE_MONITOR;
1159111593
SET_NETDEV_DEV(priv->prom_net_dev, &priv->pci_dev->dev);
1159211594

@@ -11619,7 +11621,6 @@ static const struct net_device_ops ipw_netdev_ops = {
1161911621
.ndo_set_rx_mode = ipw_net_set_multicast_list,
1162011622
.ndo_set_mac_address = ipw_net_set_mac_address,
1162111623
.ndo_start_xmit = libipw_xmit,
11622-
.ndo_change_mtu = libipw_change_mtu,
1162311624
.ndo_validate_addr = eth_validate_addr,
1162411625
};
1162511626

@@ -11729,6 +11730,9 @@ static int ipw_pci_probe(struct pci_dev *pdev,
1172911730
net_dev->wireless_handlers = &ipw_wx_handler_def;
1173011731
net_dev->ethtool_ops = &ipw_ethtool_ops;
1173111732

11733+
net_dev->min_mtu = 68;
11734+
net_dev->max_mtu = LIBIPW_DATA_LEN;
11735+
1173211736
err = sysfs_create_group(&pdev->dev.kobj, &ipw_attribute_group);
1173311737
if (err) {
1173411738
IPW_ERROR("failed to create sysfs device attributes\n");

drivers/net/wireless/intel/ipw2x00/libipw.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,6 @@ static inline int libipw_is_cck_rate(u8 rate)
948948
/* libipw.c */
949949
void free_libipw(struct net_device *dev, int monitor);
950950
struct net_device *alloc_libipw(int sizeof_priv, int monitor);
951-
int libipw_change_mtu(struct net_device *dev, int new_mtu);
952951

953952
void libipw_networks_age(struct libipw_device *ieee, unsigned long age_secs);
954953

drivers/net/wireless/intel/ipw2x00/libipw_module.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,6 @@ static void libipw_networks_initialize(struct libipw_device *ieee)
118118
&ieee->network_free_list);
119119
}
120120

121-
int libipw_change_mtu(struct net_device *dev, int new_mtu)
122-
{
123-
if ((new_mtu < 68) || (new_mtu > LIBIPW_DATA_LEN))
124-
return -EINVAL;
125-
dev->mtu = new_mtu;
126-
return 0;
127-
}
128-
EXPORT_SYMBOL(libipw_change_mtu);
129-
130121
struct net_device *alloc_libipw(int sizeof_priv, int monitor)
131122
{
132123
struct libipw_device *ieee;

drivers/net/wireless/intersil/hostap/hostap_main.c

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -765,16 +765,6 @@ static void hostap_set_multicast_list(struct net_device *dev)
765765
}
766766

767767

768-
static int prism2_change_mtu(struct net_device *dev, int new_mtu)
769-
{
770-
if (new_mtu < PRISM2_MIN_MTU || new_mtu > PRISM2_MAX_MTU)
771-
return -EINVAL;
772-
773-
dev->mtu = new_mtu;
774-
return 0;
775-
}
776-
777-
778768
static void prism2_tx_timeout(struct net_device *dev)
779769
{
780770
struct hostap_interface *iface;
@@ -813,7 +803,6 @@ static const struct net_device_ops hostap_netdev_ops = {
813803
.ndo_do_ioctl = hostap_ioctl,
814804
.ndo_set_mac_address = prism2_set_mac_address,
815805
.ndo_set_rx_mode = hostap_set_multicast_list,
816-
.ndo_change_mtu = prism2_change_mtu,
817806
.ndo_tx_timeout = prism2_tx_timeout,
818807
.ndo_validate_addr = eth_validate_addr,
819808
};
@@ -826,7 +815,6 @@ static const struct net_device_ops hostap_mgmt_netdev_ops = {
826815
.ndo_do_ioctl = hostap_ioctl,
827816
.ndo_set_mac_address = prism2_set_mac_address,
828817
.ndo_set_rx_mode = hostap_set_multicast_list,
829-
.ndo_change_mtu = prism2_change_mtu,
830818
.ndo_tx_timeout = prism2_tx_timeout,
831819
.ndo_validate_addr = eth_validate_addr,
832820
};
@@ -839,7 +827,6 @@ static const struct net_device_ops hostap_master_ops = {
839827
.ndo_do_ioctl = hostap_ioctl,
840828
.ndo_set_mac_address = prism2_set_mac_address,
841829
.ndo_set_rx_mode = hostap_set_multicast_list,
842-
.ndo_change_mtu = prism2_change_mtu,
843830
.ndo_tx_timeout = prism2_tx_timeout,
844831
.ndo_validate_addr = eth_validate_addr,
845832
};
@@ -851,6 +838,8 @@ void hostap_setup_dev(struct net_device *dev, local_info_t *local,
851838

852839
iface = netdev_priv(dev);
853840
ether_setup(dev);
841+
dev->min_mtu = PRISM2_MIN_MTU;
842+
dev->max_mtu = PRISM2_MAX_MTU;
854843
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
855844

856845
/* kernel callbacks */

drivers/net/wireless/intersil/orinoco/main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,6 @@ int orinoco_change_mtu(struct net_device *dev, int new_mtu)
322322
{
323323
struct orinoco_private *priv = ndev_priv(dev);
324324

325-
if ((new_mtu < ORINOCO_MIN_MTU) || (new_mtu > ORINOCO_MAX_MTU))
326-
return -EINVAL;
327-
328325
/* MTU + encapsulation + header length */
329326
if ((new_mtu + ENCAPS_OVERHEAD + sizeof(struct ieee80211_hdr)) >
330327
(priv->nicbuf_size - ETH_HLEN))
@@ -2288,6 +2285,9 @@ int orinoco_if_add(struct orinoco_private *priv,
22882285
dev->base_addr = base_addr;
22892286
dev->irq = irq;
22902287

2288+
dev->min_mtu = ORINOCO_MIN_MTU;
2289+
dev->max_mtu = ORINOCO_MAX_MTU;
2290+
22912291
SET_NETDEV_DEV(dev, priv->dev);
22922292
ret = register_netdev(dev);
22932293
if (ret)

drivers/staging/wlan-ng/p80211netdev.c

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -669,18 +669,6 @@ static int p80211knetdev_set_mac_address(struct net_device *dev, void *addr)
669669
return result;
670670
}
671671

672-
static int wlan_change_mtu(struct net_device *dev, int new_mtu)
673-
{
674-
/* 2312 is max 802.11 payload, 20 is overhead, (ether + llc +snap)
675-
and another 8 for wep. */
676-
if ((new_mtu < 68) || (new_mtu > (2312 - 20 - 8)))
677-
return -EINVAL;
678-
679-
dev->mtu = new_mtu;
680-
681-
return 0;
682-
}
683-
684672
static const struct net_device_ops p80211_netdev_ops = {
685673
.ndo_init = p80211knetdev_init,
686674
.ndo_open = p80211knetdev_open,
@@ -690,7 +678,6 @@ static const struct net_device_ops p80211_netdev_ops = {
690678
.ndo_do_ioctl = p80211knetdev_do_ioctl,
691679
.ndo_set_mac_address = p80211knetdev_set_mac_address,
692680
.ndo_tx_timeout = p80211knetdev_tx_timeout,
693-
.ndo_change_mtu = wlan_change_mtu,
694681
.ndo_validate_addr = eth_validate_addr,
695682
};
696683

@@ -756,6 +743,11 @@ int wlan_setup(struct wlandevice *wlandev, struct device *physdev)
756743
wdev->wiphy = wiphy;
757744
wdev->iftype = NL80211_IFTYPE_STATION;
758745
netdev->ieee80211_ptr = wdev;
746+
netdev->min_mtu = 68;
747+
/* 2312 is max 802.11 payload, 20 is overhead,
748+
* (ether + llc + snap) and another 8 for wep.
749+
*/
750+
netdev->max_mtu = (2312 - 20 - 8);
759751

760752
netif_stop_queue(netdev);
761753
netif_carrier_off(netdev);

drivers/tty/n_gsm.c

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2711,15 +2711,6 @@ static void gsm_mux_rx_netchar(struct gsm_dlci *dlci,
27112711
return;
27122712
}
27132713

2714-
static int gsm_change_mtu(struct net_device *net, int new_mtu)
2715-
{
2716-
struct gsm_mux_net *mux_net = netdev_priv(net);
2717-
if ((new_mtu < 8) || (new_mtu > mux_net->dlci->gsm->mtu))
2718-
return -EINVAL;
2719-
net->mtu = new_mtu;
2720-
return 0;
2721-
}
2722-
27232714
static void gsm_mux_net_init(struct net_device *net)
27242715
{
27252716
static const struct net_device_ops gsm_netdev_ops = {
@@ -2728,7 +2719,6 @@ static void gsm_mux_net_init(struct net_device *net)
27282719
.ndo_start_xmit = gsm_mux_net_start_xmit,
27292720
.ndo_tx_timeout = gsm_mux_net_tx_timeout,
27302721
.ndo_get_stats = gsm_mux_net_get_stats,
2731-
.ndo_change_mtu = gsm_change_mtu,
27322722
};
27332723

27342724
net->netdev_ops = &gsm_netdev_ops;
@@ -2787,6 +2777,8 @@ static int gsm_create_network(struct gsm_dlci *dlci, struct gsm_netconfig *nc)
27872777
return -ENOMEM;
27882778
}
27892779
net->mtu = dlci->gsm->mtu;
2780+
net->min_mtu = 8;
2781+
net->max_mtu = dlci->gsm->mtu;
27902782
mux_net = netdev_priv(net);
27912783
mux_net->dlci = dlci;
27922784
kref_init(&mux_net->ref);

0 commit comments

Comments
 (0)