diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-17 11:50:59 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-17 11:50:59 -0400 |
| commit | fca83168aae6fa0c36a923ef99311587ad5b54f2 (patch) | |
| tree | b6118d7d0fc56cf819ca69c63983aea999109ee4 | |
| parent | 4f2e29031e6c67802e7370292dd050fd62f337ee (diff) | |
| parent | 361cd29cf9363505c2a35bbf9a034a22feebfb07 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller:
1) Fix erroneous netfilter drop of SIP packets generated by some Cisco
phones, from Patrick McHardy.
2) Fix netfilter IPSET refcounting in list_set_add(), from Jozsef
Kadlecsik.
3) Fix TCP syncookies route lookup key, we don't use the same values we
would use for the usual SYN receive processing, from Dmitry Popov.
4) Fix NULL deref in bond_slave_netdev_event(), from Nikolay
Aleksandrov.
5) When bonding enslave fails, we can forget to clear the IFF_BONDING
bit, fix also from Nikolay Aleksandrov.
6) skb->csum_start is 16-bits, which is almost always just fine. But
if we reallocate the headroom of an SKB this can push the
skb->csum_start value outside of it's valid range. This can easily
happen when collapsing multiple SKBs from the retransmit queue
together.
Fix from Thomas Graf.
7) Fix NULL deref in be2net driver due to missing check of
__vlan_put_tag() return value, from Ivan Vecera.
8) tun_set_iff() returns zero instead of error code on failure, fix
from Wei Yongjun.
9) Like GARP, 802 MRP needs to hold the app->lock when adding MAD
events and queueing PDUs. Fix from David Ward.
10) Build fix, MVMDIO needs PHYLIB, from Thomas Petazzoni..
11) Fix mac80211 static with ipv6 modular build, from Cong Wang.
12) If userland specifies a path cost explicitly, do not override it
when the carrier state changes. From Stephen Hemminger.
13) mvnets calculates the TX queue to use incorrectly resulting in
garbage pointer derefs and crashes, fix from Willy Tarreau.
14) cdc_mbim does erroneous sizeof(ETH_HLEN). Fix from Bjorn Mork.
15) IP fragmentation can leak a refcount-less route out from an RCU
protected section. This results in crashes and all sorts of hard to
diagnose behavior. Fix from Eric Dumazet.
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (24 commits)
qlcnic: fix beaconing test for 82xx adapter
net: drop dst before queueing fragments
net: fec: fix regression in link change accounting
net: cdc_mbim: remove bogus sizeof()
drivers: net: ethernet: cpsw: get slave VLAN id from slave node instead of cpsw node
net: mvneta: fix improper tx queue usage in mvneta_tx()
esp4: fix error return code in esp_output()
bridge: make user modified path cost sticky
ipv6: statically link register_inet6addr_notifier()
net: mvmdio: add select PHYLIB
net/802/mrp: fix possible race condition when calling mrp_pdu_queue()
tuntap: fix error return code in tun_set_iff()
be2net: take care of __vlan_put_tag return value
can: sja1000: fix handling on dt properties on little endian systems
can: mcp251x: add missing IRQF_ONESHOT to request_threaded_irq
netfilter: nf_nat: fix race when unloading protocol modules
tcp: Reallocate headroom if it would overflow csum_start
stmmac: prevent interrupt loop with MMC RX IPC Counter
bonding: IFF_BONDING is not stripped on enslave failure
bonding: fix netdev event NULL pointer dereference
...
32 files changed, 227 insertions, 119 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 07401a3e256b..a61a760484f7 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
| @@ -1906,6 +1906,7 @@ err_detach: | |||
| 1906 | write_unlock_bh(&bond->lock); | 1906 | write_unlock_bh(&bond->lock); |
| 1907 | 1907 | ||
| 1908 | err_close: | 1908 | err_close: |
| 1909 | slave_dev->priv_flags &= ~IFF_BONDING; | ||
| 1909 | dev_close(slave_dev); | 1910 | dev_close(slave_dev); |
| 1910 | 1911 | ||
| 1911 | err_unset_master: | 1912 | err_unset_master: |
| @@ -3168,11 +3169,20 @@ static int bond_slave_netdev_event(unsigned long event, | |||
| 3168 | struct net_device *slave_dev) | 3169 | struct net_device *slave_dev) |
| 3169 | { | 3170 | { |
| 3170 | struct slave *slave = bond_slave_get_rtnl(slave_dev); | 3171 | struct slave *slave = bond_slave_get_rtnl(slave_dev); |
| 3171 | struct bonding *bond = slave->bond; | 3172 | struct bonding *bond; |
| 3172 | struct net_device *bond_dev = slave->bond->dev; | 3173 | struct net_device *bond_dev; |
| 3173 | u32 old_speed; | 3174 | u32 old_speed; |
| 3174 | u8 old_duplex; | 3175 | u8 old_duplex; |
| 3175 | 3176 | ||
| 3177 | /* A netdev event can be generated while enslaving a device | ||
| 3178 | * before netdev_rx_handler_register is called in which case | ||
| 3179 | * slave will be NULL | ||
| 3180 | */ | ||
| 3181 | if (!slave) | ||
| 3182 | return NOTIFY_DONE; | ||
| 3183 | bond_dev = slave->bond->dev; | ||
| 3184 | bond = slave->bond; | ||
| 3185 | |||
| 3176 | switch (event) { | 3186 | switch (event) { |
| 3177 | case NETDEV_UNREGISTER: | 3187 | case NETDEV_UNREGISTER: |
| 3178 | if (bond->setup_by_slave) | 3188 | if (bond->setup_by_slave) |
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c index f32b9fc6a983..9aa0c64c33c8 100644 --- a/drivers/net/can/mcp251x.c +++ b/drivers/net/can/mcp251x.c | |||
| @@ -929,6 +929,7 @@ static int mcp251x_open(struct net_device *net) | |||
| 929 | struct mcp251x_priv *priv = netdev_priv(net); | 929 | struct mcp251x_priv *priv = netdev_priv(net); |
| 930 | struct spi_device *spi = priv->spi; | 930 | struct spi_device *spi = priv->spi; |
| 931 | struct mcp251x_platform_data *pdata = spi->dev.platform_data; | 931 | struct mcp251x_platform_data *pdata = spi->dev.platform_data; |
| 932 | unsigned long flags; | ||
| 932 | int ret; | 933 | int ret; |
| 933 | 934 | ||
| 934 | ret = open_candev(net); | 935 | ret = open_candev(net); |
| @@ -945,9 +946,14 @@ static int mcp251x_open(struct net_device *net) | |||
| 945 | priv->tx_skb = NULL; | 946 | priv->tx_skb = NULL; |
| 946 | priv->tx_len = 0; | 947 | priv->tx_len = 0; |
| 947 | 948 | ||
| 949 | flags = IRQF_ONESHOT; | ||
| 950 | if (pdata->irq_flags) | ||
| 951 | flags |= pdata->irq_flags; | ||
| 952 | else | ||
| 953 | flags |= IRQF_TRIGGER_FALLING; | ||
| 954 | |||
| 948 | ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, | 955 | ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, |
| 949 | pdata->irq_flags ? pdata->irq_flags : IRQF_TRIGGER_FALLING, | 956 | flags, DEVICE_NAME, priv); |
| 950 | DEVICE_NAME, priv); | ||
| 951 | if (ret) { | 957 | if (ret) { |
| 952 | dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); | 958 | dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); |
| 953 | if (pdata->transceiver_enable) | 959 | if (pdata->transceiver_enable) |
diff --git a/drivers/net/can/sja1000/sja1000_of_platform.c b/drivers/net/can/sja1000/sja1000_of_platform.c index 6433b81256cd..8e0c4a001939 100644 --- a/drivers/net/can/sja1000/sja1000_of_platform.c +++ b/drivers/net/can/sja1000/sja1000_of_platform.c | |||
| @@ -96,8 +96,8 @@ static int sja1000_ofp_probe(struct platform_device *ofdev) | |||
| 96 | struct net_device *dev; | 96 | struct net_device *dev; |
| 97 | struct sja1000_priv *priv; | 97 | struct sja1000_priv *priv; |
| 98 | struct resource res; | 98 | struct resource res; |
| 99 | const u32 *prop; | 99 | u32 prop; |
| 100 | int err, irq, res_size, prop_size; | 100 | int err, irq, res_size; |
| 101 | void __iomem *base; | 101 | void __iomem *base; |
| 102 | 102 | ||
| 103 | err = of_address_to_resource(np, 0, &res); | 103 | err = of_address_to_resource(np, 0, &res); |
| @@ -138,27 +138,27 @@ static int sja1000_ofp_probe(struct platform_device *ofdev) | |||
| 138 | priv->read_reg = sja1000_ofp_read_reg; | 138 | priv->read_reg = sja1000_ofp_read_reg; |
| 139 | priv->write_reg = sja1000_ofp_write_reg; | 139 | priv->write_reg = sja1000_ofp_write_reg; |
| 140 | 140 | ||
| 141 | prop = of_get_property(np, "nxp,external-clock-frequency", &prop_size); | 141 | err = of_property_read_u32(np, "nxp,external-clock-frequency", &prop); |
| 142 | if (prop && (prop_size == sizeof(u32))) | 142 | if (!err) |
| 143 | priv->can.clock.freq = *prop / 2; | 143 | priv->can.clock.freq = prop / 2; |
| 144 | else | 144 | else |
| 145 | priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */ | 145 | priv->can.clock.freq = SJA1000_OFP_CAN_CLOCK; /* default */ |
| 146 | 146 | ||
| 147 | prop = of_get_property(np, "nxp,tx-output-mode", &prop_size); | 147 | err = of_property_read_u32(np, "nxp,tx-output-mode", &prop); |
| 148 | if (prop && (prop_size == sizeof(u32))) | 148 | if (!err) |
| 149 | priv->ocr |= *prop & OCR_MODE_MASK; | 149 | priv->ocr |= prop & OCR_MODE_MASK; |
| 150 | else | 150 | else |
| 151 | priv->ocr |= OCR_MODE_NORMAL; /* default */ | 151 | priv->ocr |= OCR_MODE_NORMAL; /* default */ |
| 152 | 152 | ||
| 153 | prop = of_get_property(np, "nxp,tx-output-config", &prop_size); | 153 | err = of_property_read_u32(np, "nxp,tx-output-config", &prop); |
| 154 | if (prop && (prop_size == sizeof(u32))) | 154 | if (!err) |
| 155 | priv->ocr |= (*prop << OCR_TX_SHIFT) & OCR_TX_MASK; | 155 | priv->ocr |= (prop << OCR_TX_SHIFT) & OCR_TX_MASK; |
| 156 | else | 156 | else |
| 157 | priv->ocr |= OCR_TX0_PULLDOWN; /* default */ | 157 | priv->ocr |= OCR_TX0_PULLDOWN; /* default */ |
| 158 | 158 | ||
| 159 | prop = of_get_property(np, "nxp,clock-out-frequency", &prop_size); | 159 | err = of_property_read_u32(np, "nxp,clock-out-frequency", &prop); |
