Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Pull networking fixes from David Miller:

1) TCP SACK processing can calculate an incorrect reordering value in
some cases, fix from Neal Cardwell.

2) tcp_mark_head_lost() can split SKBs in situations where it should
not, violating send queue invariants expected by other pieces of
code and thus resulting (eventually) in corrupted retransmit state
counters. Also from Neal Cardwell.

3) qla3xxx erroneously calls spin_lock_irqrestore() with constant
hw_flags of zero. Fix from Santosh Nayak.

4) Fix NULL deref in rt2x00, from Gabor Juhos.

5) pch_gbe passes address of wrong typed object to pch_gbe_validate_option
thus corrupting part of the value. From Dan Carpenter.

6) We must check the return value of nlmsg_parse() before trying to use
the results. From Eric Dumazet.

7) Bridging code fails to check return value of ipv6_dev_get_saddr()
thus potentially leaving uninitialized garbage in the outgoing ipv6
header. From Ulrich Weber.

8) Due to rounding and a reversed operation on jiffies, bridge message
ages can go backwards instead of forwards, thus breaking STP. Fixes
from Joakim Tjernlund.

9) r8169 modifies Config* registers without properly holding the
Config9346 lock, resulting in corrupted IP fragments on some chips.
Fix from Francois Romieu.

10) NET_PACKET_ENGINE default wan't set properly during the network
driver mega-move. Fix from Stephen Hemminger.

11) vmxnet3 uses TCP header size where it actually should use the UDP
header size, fix from Shreyas Bhatewara.

12) Netfilter bridge module autoload is busted in the compat case, fix
from Florian Westphal.

13) Wireless Key removal was not setting multicast bits correctly thus
accidently killing the unicast key 0 and thus all traffic stops.
Fix from Johannes Berg.

14) Fix endless retries of A-MPDU transmissions in brcm80211 driver.

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (22 commits)
qla3xxx: ethernet: Fix bogus interrupt state flag.
bridge: check return value of ipv6_dev_get_saddr()
rtnetlink: fix rtnl_calcit() and rtnl_dump_ifinfo()
bridge: message age needs to increase, not decrease.
bridge: Adjust min age inc for HZ > 256
tcp: don't fragment SACKed skbs in tcp_mark_head_lost()
r8169: corrupted IP fragments fix for large mtu.
packetengines: fix config default
vmxnet3: Fix transport header size
enic: fix an endian bug in enic_probe()
pch_gbe: memory corruption calling pch_gbe_validate_option()
tg3: Fix tg3_get_stats64 for 5700 / 5701 devs
tcp: fix false reordering signal in tcp_shifted_skb
tcp: fix comment for tp->highest_sack
netfilter: bridge: fix module autoload in compat case
brcm80211: smac: only print block-ack timeout message at trace level
brcm80211: smac: fix endless retry of A-MPDU transmissions
mac80211: Fix a warning on changing to monitor mode from STA
mac80211: zero initialize count field in ieee80211_tx_rate
iwlwifi: fix key removal
...

+122 -110
+23 -22
drivers/net/ethernet/broadcom/tg3.c
··· 7886 7886 return 0; 7887 7887 } 7888 7888 7889 - static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *, 7890 - struct rtnl_link_stats64 *); 7891 - static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *, 7892 - struct tg3_ethtool_stats *); 7889 + static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); 7890 + static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); 7893 7891 7894 7892 /* tp->lock is held. */ 7895 7893 static int tg3_halt(struct tg3 *tp, int kind, int silent) ··· 7908 7910 7909 7911 if (tp->hw_stats) { 7910 7912 /* Save the stats across chip resets... */ 7911 - tg3_get_stats64(tp->dev, &tp->net_stats_prev), 7913 + tg3_get_nstats(tp, &tp->net_stats_prev), 7912 7914 tg3_get_estats(tp, &tp->estats_prev); 7913 7915 7914 7916 /* And make sure the next sample is new data */ ··· 9845 9847 return ((u64)val->high << 32) | ((u64)val->low); 9846 9848 } 9847 9849 9848 - static u64 calc_crc_errors(struct tg3 *tp) 9850 + static u64 tg3_calc_crc_errors(struct tg3 *tp) 9849 9851 { 9850 9852 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9851 9853 ··· 9854 9856 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 9855 9857 u32 val; 9856 9858 9857 - spin_lock_bh(&tp->lock); 9858 9859 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 9859 9860 tg3_writephy(tp, MII_TG3_TEST1, 9860 9861 val | MII_TG3_TEST1_CRC_EN); 9861 9862 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 9862 9863 } else 9863 9864 val = 0; 9864 - spin_unlock_bh(&tp->lock); 9865 9865 9866 9866 tp->phy_crc_errors += val; 9867 9867 ··· 9873 9877 estats->member = old_estats->member + \ 9874 9878 get_stat64(&hw_stats->member) 9875 9879 9876 - static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, 9877 - struct tg3_ethtool_stats *estats) 9880 + static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) 9878 9881 { 9879 9882 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 9880 9883 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9881 9884 9882 9885 if (!hw_stats) 9883 - return old_estats; 9886 + return; 9884 9887 9885 9888 ESTAT_ADD(rx_octets); 9886 9889 ESTAT_ADD(rx_fragments); ··· 9958 9963 ESTAT_ADD(nic_tx_threshold_hit); 9959 9964 9960 9965 ESTAT_ADD(mbuf_lwm_thresh_hit); 9961 - 9962 - return estats; 9963 9966 } 9964 9967 9965 - static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 9966 - struct rtnl_link_stats64 *stats) 9968 + static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) 9967 9969 { 9968 - struct tg3 *tp = netdev_priv(dev); 9969 9970 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 9970 9971 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9971 - 9972 - if (!hw_stats) 9973 - return old_stats; 9974 9972 9975 9973 stats->rx_packets = old_stats->rx_packets + 9976 9974 get_stat64(&hw_stats->rx_ucast_packets) + ··· 10007 10019 get_stat64(&hw_stats->tx_carrier_sense_errors); 10008 10020 10009 10021 stats->rx_crc_errors = old_stats->rx_crc_errors + 10010 - calc_crc_errors(tp); 10022 + tg3_calc_crc_errors(tp); 10011 10023 10012 10024 stats->rx_missed_errors = old_stats->rx_missed_errors + 10013 10025 get_stat64(&hw_stats->rx_discards); 10014 10026 10015 10027 stats->rx_dropped = tp->rx_dropped; 10016 10028 stats->tx_dropped = tp->tx_dropped; 10017 - 10018 - return stats; 10019 10029 } 10020 10030 10021 10031 static inline u32 calc_crc(unsigned char *buf, int len) ··· 15393 15407 ec->tx_coalesce_usecs_irq = 0; 15394 15408 ec->stats_block_coalesce_usecs = 0; 15395 15409 } 15410 + } 15411 + 15412 + static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 15413 + struct rtnl_link_stats64 *stats) 15414 + { 15415 + struct tg3 *tp = netdev_priv(dev); 15416 + 15417 + if (!tp->hw_stats) 15418 + return &tp->net_stats_prev; 15419 + 15420 + spin_lock_bh(&tp->lock); 15421 + tg3_get_nstats(tp, stats); 15422 + spin_unlock_bh(&tp->lock); 15423 + 15424 + return stats; 15396 15425 } 15397 15426 15398 15427 static const struct net_device_ops tg3_netdev_ops = {
+1 -1
drivers/net/ethernet/cisco/enic/enic.h
··· 94 94 u32 rx_coalesce_usecs; 95 95 u32 tx_coalesce_usecs; 96 96 #ifdef CONFIG_PCI_IOV 97 - u32 num_vfs; 97 + u16 num_vfs; 98 98 #endif 99 99 struct enic_port_profile *pp; 100 100
+1 -1
drivers/net/ethernet/cisco/enic/enic_main.c
··· 2370 2370 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); 2371 2371 if (pos) { 2372 2372 pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, 2373 - (u16 *)&enic->num_vfs); 2373 + &enic->num_vfs); 2374 2374 if (enic->num_vfs) { 2375 2375 err = pci_enable_sriov(pdev, enic->num_vfs); 2376 2376 if (err) {
+8 -7
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
··· 321 321 pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); 322 322 hw->phy.autoneg_advertised = opt.def; 323 323 } else { 324 - hw->phy.autoneg_advertised = AutoNeg; 325 - pch_gbe_validate_option( 326 - (int *)(&hw->phy.autoneg_advertised), 327 - &opt, adapter); 324 + int tmp = AutoNeg; 325 + 326 + pch_gbe_validate_option(&tmp, &opt, adapter); 327 + hw->phy.autoneg_advertised = tmp; 328 328 } 329 329 } 330 330 ··· 495 495 .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), 496 496 .p = fc_list } } 497 497 }; 498 - hw->mac.fc = FlowControl; 499 - pch_gbe_validate_option((int *)(&hw->mac.fc), 500 - &opt, adapter); 498 + int tmp = FlowControl; 499 + 500 + pch_gbe_validate_option(&tmp, &opt, adapter); 501 + hw->mac.fc = tmp; 501 502 } 502 503 503 504 pch_gbe_check_copper_options(adapter);
+1
drivers/net/ethernet/packetengines/Kconfig
··· 4 4 5 5 config NET_PACKET_ENGINE 6 6 bool "Packet Engine devices" 7 + default y 7 8 depends on PCI 8 9 ---help--- 9 10 If you have a network (Ethernet) card belonging to this class, say Y
+2 -3
drivers/net/ethernet/qlogic/qla3xxx.c
··· 3017 3017 (void __iomem *)port_regs; 3018 3018 u32 delay = 10; 3019 3019 int status = 0; 3020 - unsigned long hw_flags = 0; 3021 3020 3022 3021 if (ql_mii_setup(qdev)) 3023 3022 return -1; ··· 3227 3228 value = ql_read_page0_reg(qdev, &port_regs->portStatus); 3228 3229 if (value & PORT_STATUS_IC) 3229 3230 break; 3230 - spin_unlock_irqrestore(&qdev->hw_lock, hw_flags); 3231 + spin_unlock_irq(&qdev->hw_lock); 3231 3232 msleep(500); 3232 - spin_lock_irqsave(&qdev->hw_lock, hw_flags); 3233 + spin_lock_irq(&qdev->hw_lock); 3233 3234 } while (--delay); 3234 3235 3235 3236 if (delay == 0) {
+8
drivers/net/ethernet/realtek/r8169.c
··· 3781 3781 3782 3782 static void rtl_hw_jumbo_enable(struct rtl8169_private *tp) 3783 3783 { 3784 + void __iomem *ioaddr = tp->mmio_addr; 3785 + 3786 + RTL_W8(Cfg9346, Cfg9346_Unlock); 3784 3787 rtl_generic_op(tp, tp->jumbo_ops.enable); 3788 + RTL_W8(Cfg9346, Cfg9346_Lock); 3785 3789 } 3786 3790 3787 3791 static void rtl_hw_jumbo_disable(struct rtl8169_private *tp) 3788 3792 { 3793 + void __iomem *ioaddr = tp->mmio_addr; 3794 + 3795 + RTL_W8(Cfg9346, Cfg9346_Unlock); 3789 3796 rtl_generic_op(tp, tp->jumbo_ops.disable); 3797 + RTL_W8(Cfg9346, Cfg9346_Lock); 3790 3798 } 3791 3799 3792 3800 static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
+1 -6
drivers/net/vmxnet3/vmxnet3_drv.c
··· 830 830 ctx->l4_hdr_size = ((struct tcphdr *) 831 831 skb_transport_header(skb))->doff * 4; 832 832 else if (iph->protocol == IPPROTO_UDP) 833 - /* 834 - * Use tcp header size so that bytes to 835 - * be copied are more than required by 836 - * the device. 837 - */ 838 833 ctx->l4_hdr_size = 839 - sizeof(struct tcphdr); 834 + sizeof(struct udphdr); 840 835 else 841 836 ctx->l4_hdr_size = 0; 842 837 } else {
+2 -2
drivers/net/vmxnet3/vmxnet3_int.h
··· 70 70 /* 71 71 * Version numbers 72 72 */ 73 - #define VMXNET3_DRIVER_VERSION_STRING "1.1.18.0-k" 73 + #define VMXNET3_DRIVER_VERSION_STRING "1.1.29.0-k" 74 74 75 75 /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ 76 - #define VMXNET3_DRIVER_VERSION_NUM 0x01011200 76 + #define VMXNET3_DRIVER_VERSION_NUM 0x01011D00 77 77 78 78 #if defined(CONFIG_PCI_MSI) 79 79 /* RSS only makes sense if MSI-X is supported. */
+1 -24
drivers/net/wireless/ath/ath9k/ar5008_phy.c
··· 489 489 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); 490 490 ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); 491 491 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); 492 - ATH_ALLOC_BANK(ah->addac5416_21, 493 - ah->iniAddac.ia_rows * ah->iniAddac.ia_columns); 494 492 ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); 495 493 496 494 return 0; ··· 517 519 ATH_FREE_BANK(ah->analogBank6Data); 518 520 ATH_FREE_BANK(ah->analogBank6TPCData); 519 521 ATH_FREE_BANK(ah->analogBank7Data); 520 - ATH_FREE_BANK(ah->addac5416_21); 521 522 ATH_FREE_BANK(ah->bank6Temp); 522 523 523 524 #undef ATH_FREE_BANK ··· 802 805 if (ah->eep_ops->set_addac) 803 806 ah->eep_ops->set_addac(ah, chan); 804 807 805 - if (AR_SREV_5416_22_OR_LATER(ah)) { 806 - REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); 807 - } else { 808 - struct ar5416IniArray temp; 809 - u32 addacSize = 810 - sizeof(u32) * ah->iniAddac.ia_rows * 811 - ah->iniAddac.ia_columns; 812 - 813 - /* For AR5416 2.0/2.1 */ 814 - memcpy(ah->addac5416_21, 815 - ah->iniAddac.ia_array, addacSize); 816 - 817 - /* override CLKDRV value at [row, column] = [31, 1] */ 818 - (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0; 819 - 820 - temp.ia_array = ah->addac5416_21; 821 - temp.ia_columns = ah->iniAddac.ia_columns; 822 - temp.ia_rows = ah->iniAddac.ia_rows; 823 - REG_WRITE_ARRAY(&temp, 1, regWrites); 824 - } 825 - 808 + REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); 826 809 REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); 827 810 828 811 ENABLE_REGWRITE_BUFFER(ah);
+19
drivers/net/wireless/ath/ath9k/ar9002_hw.c
··· 180 180 INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, 181 181 ARRAY_SIZE(ar5416Addac), 2); 182 182 } 183 + 184 + /* iniAddac needs to be modified for these chips */ 185 + if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) { 186 + struct ar5416IniArray *addac = &ah->iniAddac; 187 + u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns; 188 + u32 *data; 189 + 190 + data = kmalloc(size, GFP_KERNEL); 191 + if (!data) 192 + return; 193 + 194 + memcpy(data, addac->ia_array, size); 195 + addac->ia_array = data; 196 + 197 + if (!AR_SREV_5416_22_OR_LATER(ah)) { 198 + /* override CLKDRV value */ 199 + INI_RA(addac, 31,1) = 0; 200 + } 201 + } 183 202 } 184 203 185 204 /* Support for Japan ch.14 (2484) spread */
-1
drivers/net/wireless/ath/ath9k/hw.h
··· 940 940 u32 *analogBank6Data; 941 941 u32 *analogBank6TPCData; 942 942 u32 *analogBank7Data; 943 - u32 *addac5416_21; 944 943 u32 *bank6Temp; 945 944 946 945 u8 txpower_limit;
+4 -8
drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
··· 1051 1051 } 1052 1052 /* either retransmit or send bar if ack not recd */ 1053 1053 if (!ack_recd) { 1054 - struct ieee80211_tx_rate *txrate = 1055 - tx_info->status.rates; 1056 - if (retry && (txrate[0].count < (int)retry_limit)) { 1054 + if (retry && (ini->txretry[index] < (int)retry_limit)) { 1057 1055 ini->txretry[index]++; 1058 1056 ini->tx_in_transit--; 1059 1057 /* 1060 1058 * Use high prededence for retransmit to 1061 1059 * give some punch 1062 1060 */ 1063 - /* brcms_c_txq_enq(wlc, scb, p, 1064 - * BRCMS_PRIO_TO_PREC(tid)); */ 1065 1061 brcms_c_txq_enq(wlc, scb, p, 1066 1062 BRCMS_PRIO_TO_HI_PREC(tid)); 1067 1063 } else { ··· 1070 1074 IEEE80211_TX_STAT_AMPDU_NO_BACK; 1071 1075 skb_pull(p, D11_PHY_HDR_LEN); 1072 1076 skb_pull(p, D11_TXH_LEN); 1073 - wiphy_err(wiphy, "%s: BA Timeout, seq %d, in_" 1074 - "transit %d\n", "AMPDU status", seq, 1075 - ini->tx_in_transit); 1077 + BCMMSG(wiphy, 1078 + "BA Timeout, seq %d, in_transit %d\n", 1079 + seq, ini->tx_in_transit); 1076 1080 ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, 1077 1081 p); 1078 1082 }
+9 -1
drivers/net/wireless/iwlwifi/iwl-agn-sta.c
··· 1187 1187 unsigned long flags; 1188 1188 struct iwl_addsta_cmd sta_cmd; 1189 1189 u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); 1190 + __le16 key_flags; 1190 1191 1191 1192 /* if station isn't there, neither is the key */ 1192 1193 if (sta_id == IWL_INVALID_STATION) ··· 1213 1212 IWL_ERR(priv, "offset %d not used in uCode key table.\n", 1214 1213 keyconf->hw_key_idx); 1215 1214 1216 - sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; 1215 + key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); 1216 + key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC | 1217 + STA_KEY_FLG_INVALID; 1218 + 1219 + if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE)) 1220 + key_flags |= STA_KEY_MULTICAST_MSK; 1221 + 1222 + sta_cmd.key.key_flags = key_flags; 1217 1223 sta_cmd.key.key_offset = WEP_INVALID_OFFSET; 1218 1224 sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; 1219 1225 sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
+2 -1
drivers/net/wireless/rt2x00/rt2x00dev.c
··· 1220 1220 cancel_work_sync(&rt2x00dev->rxdone_work); 1221 1221 cancel_work_sync(&rt2x00dev->txdone_work); 1222 1222 } 1223 - destroy_workqueue(rt2x00dev->workqueue); 1223 + if (rt2x00dev->workqueue) 1224 + destroy_workqueue(rt2x00dev->workqueue); 1224 1225 1225 1226 /* 1226 1227 * Free the tx status fifo.
+2 -1
include/linux/tcp.h
··· 412 412 413 413 struct tcp_sack_block recv_sack_cache[4]; 414 414 415 - struct sk_buff *highest_sack; /* highest skb with SACK received 415 + struct sk_buff *highest_sack; /* skb just after the highest 416 + * skb with SACKed bit set 416 417 * (validity guaranteed only if 417 418 * sacked_out > 0) 418 419 */
+3 -2
include/net/tcp.h
··· 1364 1364 } 1365 1365 } 1366 1366 1367 - /* Start sequence of the highest skb with SACKed bit, valid only if 1368 - * sacked > 0 or when the caller has ensured validity by itself. 1367 + /* Start sequence of the skb just after the highest skb with SACKed 1368 + * bit, valid only if sacked_out > 0 or when the caller has ensured 1369 + * validity by itself. 1369 1370 */ 1370 1371 static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp) 1371 1372 {
+5 -2
net/bridge/br_multicast.c
··· 446 446 ip6h->nexthdr = IPPROTO_HOPOPTS; 447 447 ip6h->hop_limit = 1; 448 448 ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1)); 449 - ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, 450 - &ip6h->saddr); 449 + if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, 450 + &ip6h->saddr)) { 451 + kfree_skb(skb); 452 + return NULL; 453 + } 451 454 ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest); 452 455 453 456 hopopt = (u8 *)(ip6h + 1);
+3 -3
net/bridge/br_stp.c
··· 17 17 #include "br_private_stp.h" 18 18 19 19 /* since time values in bpdu are in jiffies and then scaled (1/256) 20 - * before sending, make sure that is at least one. 20 + * before sending, make sure that is at least one STP tick. 21 21 */ 22 - #define MESSAGE_AGE_INCR ((HZ < 256) ? 1 : (HZ/256)) 22 + #define MESSAGE_AGE_INCR ((HZ / 256) + 1) 23 23 24 24 static const char *const br_port_state_names[] = { 25 25 [BR_STATE_DISABLED] = "disabled", ··· 186 186 p->designated_cost = bpdu->root_path_cost; 187 187 p->designated_bridge = bpdu->bridge_id; 188 188 p->designated_port = bpdu->port_id; 189 - p->designated_age = jiffies + bpdu->message_age; 189 + p->designated_age = jiffies - bpdu->message_age; 190 190 191 191 mod_timer(&p->message_age_timer, jiffies 192 192 + (p->br->max_age - bpdu->message_age));
+2 -8
net/bridge/netfilter/ebtables.c
··· 1893 1893 1894 1894 switch (compat_mwt) { 1895 1895 case EBT_COMPAT_MATCH: 1896 - match = try_then_request_module(xt_find_match(NFPROTO_BRIDGE, 1897 - name, 0), "ebt_%s", name); 1898 - if (match == NULL) 1899 - return -ENOENT; 1896 + match = xt_request_find_match(NFPROTO_BRIDGE, name, 0); 1900 1897 if (IS_ERR(match)) 1901 1898 return PTR_ERR(match); 1902 1899 ··· 1912 1915 break; 1913 1916 case EBT_COMPAT_WATCHER: /* fallthrough */ 1914 1917 case EBT_COMPAT_TARGET: 1915 - wt = try_then_request_module(xt_find_target(NFPROTO_BRIDGE, 1916 - name, 0), "ebt_%s", name); 1917 - if (wt == NULL) 1918 - return -ENOENT; 1918 + wt = xt_request_find_target(NFPROTO_BRIDGE, name, 0); 1919 1919 if (IS_ERR(wt)) 1920 1920 return PTR_ERR(wt); 1921 1921 off = xt_compat_target_offset(wt);
+10 -8
net/core/rtnetlink.c
··· 1060 1060 rcu_read_lock(); 1061 1061 cb->seq = net->dev_base_seq; 1062 1062 1063 - nlmsg_parse(cb->nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, 1064 - ifla_policy); 1063 + if (nlmsg_parse(cb->nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, 1064 + ifla_policy) >= 0) { 1065 1065 1066 - if (tb[IFLA_EXT_MASK]) 1067 - ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); 1066 + if (tb[IFLA_EXT_MASK]) 1067 + ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); 1068 + } 1068 1069 1069 1070 for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { 1070 1071 idx = 0; ··· 1901 1900 u32 ext_filter_mask = 0; 1902 1901 u16 min_ifinfo_dump_size = 0; 1903 1902 1904 - nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, ifla_policy); 1905 - 1906 - if (tb[IFLA_EXT_MASK]) 1907 - ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); 1903 + if (nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, 1904 + ifla_policy) >= 0) { 1905 + if (tb[IFLA_EXT_MASK]) 1906 + ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); 1907 + } 1908 1908 1909 1909 if (!ext_filter_mask) 1910 1910 return NLMSG_GOODSIZE;
+11 -8
net/ipv4/tcp_input.c
··· 1403 1403 1404 1404 BUG_ON(!pcount); 1405 1405 1406 - /* Adjust hint for FACK. Non-FACK is handled in tcp_sacktag_one(). */ 1407 - if (tcp_is_fack(tp) && (skb == tp->lost_skb_hint)) 1406 + /* Adjust counters and hints for the newly sacked sequence 1407 + * range but discard the return value since prev is already 1408 + * marked. We must tag the range first because the seq 1409 + * advancement below implicitly advances 1410 + * tcp_highest_sack_seq() when skb is highest_sack. 1411 + */ 1412 + tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, 1413 + start_seq, end_seq, dup_sack, pcount); 1414 + 1415 + if (skb == tp->lost_skb_hint) 1408 1416 tp->lost_cnt_hint += pcount; 1409 1417 1410 1418 TCP_SKB_CB(prev)->end_seq += shifted; ··· 1437 1429 skb_shinfo(skb)->gso_size = 0; 1438 1430 skb_shinfo(skb)->gso_type = 0; 1439 1431 } 1440 - 1441 - /* Adjust counters and hints for the newly sacked sequence range but 1442 - * discard the return value since prev is already marked. 1443 - */ 1444 - tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, 1445 - start_seq, end_seq, dup_sack, pcount); 1446 1432 1447 1433 /* Difference in this won't matter, both ACKed by the same cumul. ACK */ 1448 1434 TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); ··· 2569 2567 2570 2568 if (cnt > packets) { 2571 2569 if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) || 2570 + (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) || 2572 2571 (oldcnt >= packets)) 2573 2572 break; 2574 2573
+3
net/mac80211/iface.c
··· 1332 1332 hw_roc = true; 1333 1333 1334 1334 list_for_each_entry(sdata, &local->interfaces, list) { 1335 + if (sdata->vif.type == NL80211_IFTYPE_MONITOR || 1336 + sdata->vif.type == NL80211_IFTYPE_AP_VLAN) 1337 + continue; 1335 1338 if (sdata->old_idle == sdata->vif.bss_conf.idle) 1336 1339 continue; 1337 1340 if (!ieee80211_sdata_running(sdata))
+1 -1
net/mac80211/rate.c
··· 344 344 for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { 345 345 info->control.rates[i].idx = -1; 346 346 info->control.rates[i].flags = 0; 347 - info->control.rates[i].count = 1; 347 + info->control.rates[i].count = 0; 348 348 } 349 349 350 350 if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL)