aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_netlink.c3
-rw-r--r--drivers/net/dsa/dsa_loop.c3
-rw-r--r--drivers/net/ethernet/aquantia/atlantic/aq_nic.c6
-rw-r--r--drivers/net/ethernet/atheros/alx/main.c4
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c3
-rw-r--r--drivers/net/ethernet/brocade/bna/bfa_ioc.c2
-rw-r--r--drivers/net/ethernet/brocade/bna/bnad_ethtool.c4
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4.h9
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c38
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h6
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/cmd.c14
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c5
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_rx.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/resource_tracker.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_cxt.c1
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_dev.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_main.c6
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_filter.c5
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_main.c25
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_dbg.c4
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c41
-rw-r--r--drivers/net/ethernet/ti/cpsw.c16
-rw-r--r--drivers/net/hamradio/yam.c10
-rw-r--r--drivers/net/hippi/rrunner.c17
-rw-r--r--drivers/net/phy/mdio-mux-bcm-iproc.c5
-rw-r--r--drivers/net/usb/cdc_ncm.c11
-rw-r--r--drivers/net/wimax/i2400m/i2400m-usb.h2
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_mac.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/mac.c4
-rw-r--r--drivers/net/wireless/intel/iwlegacy/4965-mac.c4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/dvm/rx.c4
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c8
-rw-r--r--include/net/addrconf.h2
-rw-r--r--include/net/cfg80211.h2
-rw-r--r--include/net/mac80211.h2
-rw-r--r--include/net/secure_seq.h10
-rw-r--r--include/net/tcp.h9
-rw-r--r--kernel/bpf/verifier.c21
-rw-r--r--net/8021q/vlan_dev.c13
-rw-r--r--net/bridge/br_netlink.c4
-rw-r--r--net/core/secure_seq.c31
-rw-r--r--net/decnet/dn_neigh.c12
-rw-r--r--net/ipv4/inet_connection_sock.c2
-rw-r--r--net/ipv4/ip_vti.c13
-rw-r--r--net/ipv4/syncookies.c12
-rw-r--r--net/ipv4/tcp_input.c8
-rw-r--r--net/ipv4/tcp_ipv4.c32
-rw-r--r--net/ipv4/tcp_output.c4
-rw-r--r--net/ipv6/addrconf.c1
-rw-r--r--net/ipv6/route.c13
-rw-r--r--net/ipv6/syncookies.c10
-rw-r--r--net/ipv6/tcp_ipv6.c32
-rw-r--r--net/mac80211/ibss.c2
-rw-r--r--net/mac80211/mlme.c4
-rw-r--r--net/wireless/nl80211.c4
55 files changed, 345 insertions, 167 deletions
diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
index c502c139d3bc..47a8103610bc 100644
--- a/drivers/net/bonding/bond_netlink.c
+++ b/drivers/net/bonding/bond_netlink.c
@@ -549,7 +549,8 @@ static int bond_fill_info(struct sk_buff *skb,
549 targets_added = 0; 549 targets_added = 0;
550 for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) { 550 for (i = 0; i < BOND_MAX_ARP_TARGETS; i++) {
551 if (bond->params.arp_targets[i]) { 551 if (bond->params.arp_targets[i]) {
552 nla_put_be32(skb, i, bond->params.arp_targets[i]); 552 if (nla_put_be32(skb, i, bond->params.arp_targets[i]))
553 goto nla_put_failure;
553 targets_added = 1; 554 targets_added = 1;
554 } 555 }
555 } 556 }
diff --git a/drivers/net/dsa/dsa_loop.c b/drivers/net/dsa/dsa_loop.c
index f0fc4de4fc9a..a19e1781e9bb 100644
--- a/drivers/net/dsa/dsa_loop.c
+++ b/drivers/net/dsa/dsa_loop.c
@@ -256,6 +256,9 @@ static int dsa_loop_drv_probe(struct mdio_device *mdiodev)
256 return -ENOMEM; 256 return -ENOMEM;
257 257
258 ps = devm_kzalloc(&mdiodev->dev, sizeof(*ps), GFP_KERNEL); 258 ps = devm_kzalloc(&mdiodev->dev, sizeof(*ps), GFP_KERNEL);
259 if (!ps)
260 return -ENOMEM;
261
259 ps->netdev = dev_get_by_name(&init_net, pdata->netdev); 262 ps->netdev = dev_get_by_name(&init_net, pdata->netdev);
260 if (!ps->netdev) 263 if (!ps->netdev)
261 return -EPROBE_DEFER; 264 return -EPROBE_DEFER;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
index cdb02991f249..9ee1c5016784 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
@@ -755,7 +755,7 @@ void aq_nic_get_stats(struct aq_nic_s *self, u64 *data)
755 count = 0U; 755 count = 0U;
756 756
757 for (i = 0U, aq_vec = self->aq_vec[0]; 757 for (i = 0U, aq_vec = self->aq_vec[0];
758 self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) { 758 aq_vec && self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i]) {
759 data += count; 759 data += count;
760 aq_vec_get_sw_stats(aq_vec, data, &count); 760 aq_vec_get_sw_stats(aq_vec, data, &count);
761 } 761 }
@@ -959,8 +959,10 @@ void aq_nic_free_hot_resources(struct aq_nic_s *self)
959 goto err_exit; 959 goto err_exit;
960 960
961 for (i = AQ_DIMOF(self->aq_vec); i--;) { 961 for (i = AQ_DIMOF(self->aq_vec); i--;) {
962 if (self->aq_vec[i]) 962 if (self->aq_vec[i]) {
963 aq_vec_free(self->aq_vec[i]); 963 aq_vec_free(self->aq_vec[i]);
964 self->aq_vec[i] = NULL;
965 }
964 } 966 }
965 967
966err_exit:; 968err_exit:;
diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c
index a8c2db881b75..567ee54504bc 100644
--- a/drivers/net/ethernet/atheros/alx/main.c
+++ b/drivers/net/ethernet/atheros/alx/main.c
@@ -838,7 +838,7 @@ static int alx_enable_msix(struct alx_priv *alx)
838 838
839 err = pci_alloc_irq_vectors(alx->hw.pdev, num_vec, num_vec, 839 err = pci_alloc_irq_vectors(alx->hw.pdev, num_vec, num_vec,
840 PCI_IRQ_MSIX); 840 PCI_IRQ_MSIX);
841 if (err) { 841 if (err < 0) {
842 netdev_warn(alx->dev, "Enabling MSI-X interrupts failed!\n"); 842 netdev_warn(alx->dev, "Enabling MSI-X interrupts failed!\n");
843 return err; 843 return err;
844 } 844 }
@@ -904,7 +904,7 @@ static int alx_init_intr(struct alx_priv *alx)
904 904
905 ret = pci_alloc_irq_vectors(alx->hw.pdev, 1, 1, 905 ret = pci_alloc_irq_vectors(alx->hw.pdev, 1, 1,
906 PCI_IRQ_MSI | PCI_IRQ_LEGACY); 906 PCI_IRQ_MSI | PCI_IRQ_LEGACY);
907 if (ret) 907 if (ret < 0)
908 return ret; 908 return ret;
909 909
910 alx->num_vec = 1; 910 alx->num_vec = 1;
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index b3ba66032980..b56c54d68d5e 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -3000,7 +3000,8 @@ static int bnxt_alloc_ntp_fltrs(struct bnxt *bp)
3000 INIT_HLIST_HEAD(&bp->ntp_fltr_hash_tbl[i]); 3000 INIT_HLIST_HEAD(&bp->ntp_fltr_hash_tbl[i]);
3001 3001
3002 bp->ntp_fltr_count = 0; 3002 bp->ntp_fltr_count = 0;
3003 bp->ntp_fltr_bmap = kzalloc(BITS_TO_LONGS(BNXT_NTP_FLTR_MAX_FLTR), 3003 bp->ntp_fltr_bmap = kcalloc(BITS_TO_LONGS(BNXT_NTP_FLTR_MAX_FLTR),
3004 sizeof(long),
3004 GFP_KERNEL); 3005 GFP_KERNEL);
3005 3006
3006 if (!bp->ntp_fltr_bmap) 3007 if (!bp->ntp_fltr_bmap)
diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
index 0f6811860ad5..a36e38676640 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
@@ -2845,7 +2845,7 @@ bfa_ioc_get_adapter_optrom_ver(struct bfa_ioc *ioc, char *optrom_ver)
2845static void 2845static void
2846bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc, char *manufacturer) 2846bfa_ioc_get_adapter_manufacturer(struct bfa_ioc *ioc, char *manufacturer)
2847{ 2847{
2848 memcpy(manufacturer, BFA_MFG_NAME, BFA_ADAPTER_MFG_NAME_LEN); 2848 strncpy(manufacturer, BFA_MFG_NAME, BFA_ADAPTER_MFG_NAME_LEN);
2849} 2849}
2850 2850
2851static void 2851static void
diff --git a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
index 286593922139..31032de5843b 100644
--- a/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
+++ b/drivers/net/ethernet/brocade/bna/bnad_ethtool.c
@@ -547,8 +547,8 @@ bnad_get_strings(struct net_device *netdev, u32 stringset, u8 *string)
547 for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) { 547 for (i = 0; i < BNAD_ETHTOOL_STATS_NUM; i++) {
548 BUG_ON(!(strlen(bnad_net_stats_strings[i]) < 548 BUG_ON(!(strlen(bnad_net_stats_strings[i]) <
549 ETH_GSTRING_LEN)); 549 ETH_GSTRING_LEN));
550 memcpy(string, bnad_net_stats_strings[i], 550 strncpy(string, bnad_net_stats_strings[i],
551 ETH_GSTRING_LEN); 551 ETH_GSTRING_LEN);
552 string += ETH_GSTRING_LEN; 552 string += ETH_GSTRING_LEN;
553 } 553 }
554 bmap = bna_tx_rid_mask(&bnad->bna); 554 bmap = bna_tx_rid_mask(&bnad->bna);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index 1d2be2dd19dd..e88c1808e46f 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -108,6 +108,12 @@ enum {
108 PAUSE_AUTONEG = 1 << 2 108 PAUSE_AUTONEG = 1 << 2
109}; 109};
110 110
111enum {
112 FEC_AUTO = 1 << 0, /* IEEE 802.3 "automatic" */
113 FEC_RS = 1 << 1, /* Reed-Solomon */
114 FEC_BASER_RS = 1 << 2 /* BaseR/Reed-Solomon */
115};
116
111struct port_stats { 117struct port_stats {
112 u64 tx_octets; /* total # of octets in good frames */ 118 u64 tx_octets; /* total # of octets in good frames */
113 u64 tx_frames; /* all good frames */ 119 u64 tx_frames; /* all good frames */
@@ -432,6 +438,9 @@ struct link_config {
432 unsigned int speed; /* actual link speed */ 438 unsigned int speed; /* actual link speed */
433 unsigned char requested_fc; /* flow control user has requested */ 439 unsigned char requested_fc; /* flow control user has requested */
434 unsigned char fc; /* actual link flow control */ 440 unsigned char fc; /* actual link flow control */
441 unsigned char auto_fec; /* Forward Error Correction: */
442 unsigned char requested_fec; /* "automatic" (IEEE 802.3), */
443 unsigned char fec; /* requested, and actual in use */
435 unsigned char autoneg; /* autonegotiating? */ 444 unsigned char autoneg; /* autonegotiating? */
436 unsigned char link_ok; /* link up? */ 445 unsigned char link_ok; /* link up? */
437 unsigned char link_down_rc; /* link down reason */ 446 unsigned char link_down_rc; /* link down reason */
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index 0de8eb72325c..aded42b96f6d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -3707,7 +3707,8 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port,
3707 struct link_config *lc) 3707 struct link_config *lc)
3708{ 3708{
3709 struct fw_port_cmd c; 3709 struct fw_port_cmd c;
3710 unsigned int fc = 0, mdi = FW_PORT_CAP_MDI_V(FW_PORT_CAP_MDI_AUTO); 3710 unsigned int mdi = FW_PORT_CAP_MDI_V(FW_PORT_CAP_MDI_AUTO);
3711 unsigned int fc = 0, fec = 0, fw_fec = 0;
3711 3712
3712 lc->link_ok = 0; 3713 lc->link_ok = 0;
3713 if (lc->requested_fc & PAUSE_RX) 3714 if (lc->requested_fc & PAUSE_RX)
@@ -3715,6 +3716,13 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port,
3715 if (lc->requested_fc & PAUSE_TX) 3716 if (lc->requested_fc & PAUSE_TX)
3716 fc |= FW_PORT_CAP_FC_TX; 3717 fc |= FW_PORT_CAP_FC_TX;
3717 3718
3719 fec = lc->requested_fec & FEC_AUTO ? lc->auto_fec : lc->requested_fec;
3720
3721 if (fec & FEC_RS)
3722 fw_fec |= FW_PORT_CAP_FEC_RS;
3723 if (fec & FEC_BASER_RS)
3724 fw_fec |= FW_PORT_CAP_FEC_BASER_RS;
3725
3718 memset(&c, 0, sizeof(c)); 3726 memset(&c, 0, sizeof(c));
3719 c.op_to_portid = cpu_to_be32(FW_CMD_OP_V(FW_PORT_CMD) | 3727 c.op_to_portid = cpu_to_be32(FW_CMD_OP_V(FW_PORT_CMD) |
3720 FW_CMD_REQUEST_F | FW_CMD_EXEC_F | 3728 FW_CMD_REQUEST_F | FW_CMD_EXEC_F |
@@ -3725,13 +3733,15 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int mbox, unsigned int port,
3725 3733
3726 if (!(lc->supported & FW_PORT_CAP_ANEG)) { 3734 if (!(lc->supported & FW_PORT_CAP_ANEG)) {
3727 c.u.l1cfg.rcap = cpu_to_be32((lc->supported & ADVERT_MASK) | 3735 c.u.l1cfg.rcap = cpu_to_be32((lc->supported & ADVERT_MASK) |
3728 fc); 3736 fc | fw_fec);
3729 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX); 3737 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
3730 } else if (lc->autoneg == AUTONEG_DISABLE) { 3738 } else if (lc->autoneg == AUTONEG_DISABLE) {
3731 c.u.l1cfg.rcap = cpu_to_be32(lc->requested_speed | fc | mdi); 3739 c.u.l1cfg.rcap = cpu_to_be32(lc->requested_speed | fc |
3740 fw_fec | mdi);
3732 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX); 3741 lc->fc = lc->requested_fc & (PAUSE_RX | PAUSE_TX);
3733 } else 3742 } else
3734 c.u.l1cfg.rcap = cpu_to_be32(lc->advertising | fc | mdi); 3743 c.u.l1cfg.rcap = cpu_to_be32(lc->advertising | fc |
3744 fw_fec | mdi);
3735 3745
3736 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL); 3746 return t4_wr_mbox(adap, mbox, &c, sizeof(c), NULL);
3737} 3747}
@@ -7407,13 +7417,26 @@ static void get_pci_mode(struct adapter *adapter, struct pci_params *p)
7407 * Initializes the SW state maintained for each link, including the link's 7417 * Initializes the SW state maintained for each link, including the link's
7408 * capabilities and default speed/flow-control/autonegotiation settings. 7418 * capabilities and default speed/flow-control/autonegotiation settings.
7409 */ 7419 */
7410static void init_link_config(struct link_config *lc, unsigned int caps) 7420static void init_link_config(struct link_config *lc, unsigned int pcaps,
7421 unsigned int acaps)
7411{ 7422{
7412 lc->supported = caps; 7423 lc->supported = pcaps;
7413 lc->lp_advertising = 0; 7424 lc->lp_advertising = 0;
7414 lc->requested_speed = 0; 7425 lc->requested_speed = 0;
7415 lc->speed = 0; 7426 lc->speed = 0;
7416 lc->requested_fc = lc->fc = PAUSE_RX | PAUSE_TX; 7427 lc->requested_fc = lc->fc = PAUSE_RX | PAUSE_TX;
7428 lc->auto_fec = 0;
7429
7430 /* For Forward Error Control, we default to whatever the Firmware
7431 * tells us the Link is currently advertising.
7432 */
7433 if (acaps & FW_PORT_CAP_FEC_RS)
7434 lc->auto_fec |= FEC_RS;
7435 if (acaps & FW_PORT_CAP_FEC_BASER_RS)
7436 lc->auto_fec |= FEC_BASER_RS;
7437 lc->requested_fec = FEC_AUTO;
7438 lc->fec = lc->auto_fec;
7439
7417 if (lc->supported & FW_PORT_CAP_ANEG) { 7440 if (lc->supported & FW_PORT_CAP_ANEG) {
7418 lc->advertising = lc->supported & ADVERT_MASK; 7441 lc->advertising = lc->supported & ADVERT_MASK;
7419 lc->autoneg = AUTONEG_ENABLE; 7442 lc->autoneg = AUTONEG_ENABLE;
@@ -7991,7 +8014,8 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
7991 pi->port_type = FW_PORT_CMD_PTYPE_G(ret); 8014 pi->port_type = FW_PORT_CMD_PTYPE_G(ret);
7992 pi->mod_type = FW_PORT_MOD_TYPE_NA; 8015 pi->mod_type = FW_PORT_MOD_TYPE_NA;
7993 8016
7994 init_link_config(&pi->link_cfg, be16_to_cpu(c.u.info.pcap)); 8017 init_link_config(&pi->link_cfg, be16_to_cpu(c.u.info.pcap),
8018 be16_to_cpu(c.u.info.acap));
7995 return 0; 8019 return 0;
7996} 8020}
7997 8021
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
index 8f8c079d0d2b..251a35e9795c 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
@@ -2263,9 +2263,9 @@ enum fw_port_cap {
2263 FW_PORT_CAP_ANEG = 0x0100, 2263 FW_PORT_CAP_ANEG = 0x0100,
2264 FW_PORT_CAP_MDIX = 0x0200, 2264 FW_PORT_CAP_MDIX = 0x0200,
2265 FW_PORT_CAP_MDIAUTO = 0x0400, 2265 FW_PORT_CAP_MDIAUTO = 0x0400,
2266 FW_PORT_CAP_FEC = 0x0800, 2266 FW_PORT_CAP_FEC_RS = 0x0800,
2267 FW_PORT_CAP_TECHKR = 0x1000, 2267 FW_PORT_CAP_FEC_BASER_RS = 0x1000,
2268 FW_PORT_CAP_TECHKX4 = 0x2000, 2268 FW_PORT_CAP_FEC_RESERVED = 0x2000,
2269 FW_PORT_CAP_802_3_PAUSE = 0x4000, 2269 FW_PORT_CAP_802_3_PAUSE = 0x4000,
2270 FW_PORT_CAP_802_3_ASM_DIR = 0x8000, 2270 FW_PORT_CAP_802_3_ASM_DIR = 0x8000,
2271}; 2271};
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c
index 0e0fa7030565..c1af47e45d3f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/cmd.c
+++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c
@@ -1789,9 +1789,17 @@ static int mlx4_master_process_vhcr(struct mlx4_dev *dev, int slave,
1789 } 1789 }
1790 1790
1791 if (err) { 1791 if (err) {
1792 if (!(dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR)) 1792 if (!(dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR)) {
1793 mlx4_warn(dev, "vhcr command:0x%x slave:%d failed with error:%d, status %d\n", 1793 if (vhcr->op == MLX4_CMD_ALLOC_RES &&
1794 vhcr->op, slave, vhcr->errno, err); 1794 (vhcr->in_modifier & 0xff) == RES_COUNTER &&
1795 err == -EDQUOT)
1796 mlx4_dbg(dev,
1797 "Unable to allocate counter for slave %d (%d)\n",
1798 slave, err);
1799 else
1800 mlx4_warn(dev, "vhcr command:0x%x slave:%d failed with error:%d, status %d\n",
1801 vhcr->op, slave, vhcr->errno, err);
1802 }
1795 vhcr_cmd->status = mlx4_errno_to_status(err); 1803 vhcr_cmd->status = mlx4_errno_to_status(err);
1796 goto out_status; 1804 goto out_status;
1797 } 1805 }
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index ffbcb27c05e5..ae5fdc2df654 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -1562,6 +1562,11 @@ static int mlx4_en_flow_replace(struct net_device *dev,
1562 qpn = priv->drop_qp.qpn; 1562 qpn = priv->drop_qp.qpn;
1563 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) { 1563 else if (cmd->fs.ring_cookie & EN_ETHTOOL_QP_ATTACH) {
1564 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1); 1564 qpn = cmd->fs.ring_cookie & (EN_ETHTOOL_QP_ATTACH - 1);
1565 if (qpn < priv->rss_map.base_qpn ||
1566 qpn >= priv->rss_map.base_qpn + priv->rx_ring_num) {
1567 en_warn(priv, "rxnfc: QP (0x%x) doesn't exist\n", qpn);
1568 return -EINVAL;
1569 }
1565 } else { 1570 } else {
1566 if (cmd->fs.ring_cookie >= priv->rx_ring_num) { 1571 if (cmd->fs.ring_cookie >= priv->rx_ring_num) {
1567 en_warn(priv, "rxnfc: RX ring (%llu) doesn't exist\n", 1572 en_warn(priv, "rxnfc: RX ring (%llu) doesn't exist\n",
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
index aa074e57ce06..77abd1813047 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
@@ -997,7 +997,8 @@ void mlx4_en_calc_rx_buf(struct net_device *dev)
997 en_dbg(DRV, priv, "Rx buffer scatter-list (effective-mtu:%d num_frags:%d):\n", 997 en_dbg(DRV, priv, "Rx buffer scatter-list (effective-mtu:%d num_frags:%d):\n",
998 eff_mtu, priv->num_frags); 998 eff_mtu, priv->num_frags);
999 for (i = 0; i < priv->num_frags; i++) { 999 for (i = 0; i < priv->num_frags; i++) {
1000 en_err(priv, 1000 en_dbg(DRV,
1001 priv,
1001 " frag:%d - size:%d stride:%d\n", 1002 " frag:%d - size:%d stride:%d\n",
1002 i, 1003 i,
1003 priv->frag_info[i].frag_size, 1004 priv->frag_info[i].frag_size,
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index 4aa29ee93013..07516545474f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -311,7 +311,7 @@ static inline int mlx4_grant_resource(struct mlx4_dev *dev, int slave,
311 struct mlx4_priv *priv = mlx4_priv(dev); 311 struct mlx4_priv *priv = mlx4_priv(dev);
312 struct resource_allocator *res_alloc = 312 struct resource_allocator *res_alloc =
313 &priv->mfunc.master.res_tracker.res_alloc[res_type]; 313 &priv->mfunc.master.res_tracker.res_alloc[res_type];
314 int err = -EINVAL; 314 int err = -EDQUOT;
315 int allocated, free, reserved, guaranteed, from_free; 315 int allocated, free, reserved, guaranteed, from_free;
316 int from_rsvd; 316 int from_rsvd;
317 317
diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
index b3aaa985956e..694845793af2 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
@@ -1460,6 +1460,7 @@ void qed_qm_init_pf(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1460 params.is_first_pf = p_hwfn->first_on_engine; 1460 params.is_first_pf = p_hwfn->first_on_engine;
1461 params.num_pf_cids = iids.cids; 1461 params.num_pf_cids = iids.cids;
1462 params.num_vf_cids = iids.vf_cids; 1462 params.num_vf_cids = iids.vf_cids;
1463 params.num_tids = iids.tids;
1463 params.start_pq = qm_info->start_pq; 1464 params.start_pq = qm_info->start_pq;
1464 params.num_pf_pqs = qm_info->num_pqs - qm_info->num_vf_pqs; 1465 params.num_pf_pqs = qm_info->num_pqs - qm_info->num_vf_pqs;
1465 params.num_vf_pqs = qm_info->num_vf_pqs; 1466 params.num_vf_pqs = qm_info->num_vf_pqs;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index bb70522ad362..463927f17032 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -1370,7 +1370,7 @@ qed_hw_init_pf_doorbell_bar(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
1370 NULL) + 1370 NULL) +
1371 qed_cxt_get_proto_cid_count(p_hwfn, PROTOCOLID_ETH, 1371 qed_cxt_get_proto_cid_count(p_hwfn, PROTOCOLID_ETH,
1372 NULL); 1372 NULL);
1373 norm_regsize = roundup(QED_PF_DEMS_SIZE * non_pwm_conn, 4096); 1373 norm_regsize = roundup(QED_PF_DEMS_SIZE * non_pwm_conn, PAGE_SIZE);
1374 min_addr_reg1 = norm_regsize / 4096; 1374 min_addr_reg1 = norm_regsize / 4096;
1375 pwm_regsize = db_bar_size - norm_regsize; 1375 pwm_regsize = db_bar_size - norm_regsize;
1376 1376
diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
index c67ff1411799..537d1236a4fe 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_main.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
@@ -1093,10 +1093,12 @@ static int qed_slowpath_stop(struct qed_dev *cdev)
1093 qed_free_stream_mem(cdev); 1093 qed_free_stream_mem(cdev);
1094 if (IS_QED_ETH_IF(cdev)) 1094 if (IS_QED_ETH_IF(cdev))
1095 qed_sriov_disable(cdev, true); 1095 qed_sriov_disable(cdev, true);
1096 }
1097
1098 qed_nic_stop(cdev);
1096 1099
1097 qed_nic_stop(cdev); 1100 if (IS_PF(cdev))
1098 qed_slowpath_irq_free(cdev); 1101 qed_slowpath_irq_free(cdev);
1099 }
1100 1102
1101 qed_disable_msix(cdev); 1103 qed_disable_msix(cdev);
1102 1104
diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index eb5652073ca8..333876c19d7d 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -1028,11 +1028,6 @@ int qede_xdp(struct net_device *dev, struct netdev_xdp *xdp)
1028{ 1028{
1029 struct qede_dev *edev = netdev_priv(dev); 1029 struct qede_dev *edev = netdev_priv(dev);
1030 1030
1031 if (IS_VF(edev)) {
1032 DP_NOTICE(edev, "VFs don't support XDP\n");
1033 return -EOPNOTSUPP;
1034 }
1035
1036 switch (xdp->command) { 1031 switch (xdp->command) {
1037 case XDP_SETUP_PROG: 1032 case XDP_SETUP_PROG:
1038 return qede_xdp_set(edev, xdp->prog); 1033 return qede_xdp_set(edev, xdp->prog);
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index b9ba23d71c61..38b77bbfe4ee 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -563,6 +563,23 @@ static const struct net_device_ops qede_netdev_ops = {
563#endif 563#endif
564}; 564};
565 565
566static const struct net_device_ops qede_netdev_vf_ops = {
567 .ndo_open = qede_open,
568 .ndo_stop = qede_close,
569 .ndo_start_xmit = qede_start_xmit,
570 .ndo_set_rx_mode = qede_set_rx_mode,
571 .ndo_set_mac_address = qede_set_mac_addr,
572 .ndo_validate_addr = eth_validate_addr,
573 .ndo_change_mtu = qede_change_mtu,
574 .ndo_vlan_rx_add_vid = qede_vlan_rx_add_vid,
575 .ndo_vlan_rx_kill_vid = qede_vlan_rx_kill_vid,
576 .ndo_set_features = qede_set_features,
577 .ndo_get_stats64 = qede_get_stats64,
578 .ndo_udp_tunnel_add = qede_udp_tunnel_add,
579 .ndo_udp_tunnel_del = qede_udp_tunnel_del,
580 .ndo_features_check = qede_features_check,
581};
582
566/* ------------------------------------------------------------------------- 583/* -------------------------------------------------------------------------
567 * START OF PROBE / REMOVE 584 * START OF PROBE / REMOVE
568 * ------------------------------------------------------------------------- 585 * -------------------------------------------------------------------------
@@ -622,7 +639,10 @@ static void qede_init_ndev(struct qede_dev *edev)
622 639
623 ndev->watchdog_timeo = TX_TIMEOUT; 640 ndev->watchdog_timeo = TX_TIMEOUT;
624 641
625 ndev->netdev_ops = &qede_netdev_ops; 642 if (IS_VF(edev))
643 ndev->netdev_ops = &qede_netdev_vf_ops;
644 else
645 ndev->netdev_ops = &qede_netdev_ops;
626 646
627 qede_set_ethtool_ops(ndev); 647 qede_set_ethtool_ops(ndev);
628 648
@@ -1313,6 +1333,9 @@ static void qede_free_mem_fp(struct qede_dev *edev, struct qede_fastpath *fp)
1313 if (fp->type & QEDE_FASTPATH_RX) 1333 if (fp->type & QEDE_FASTPATH_RX)
1314 qede_free_mem_rxq(edev, fp->rxq); 1334 qede_free_mem_rxq(edev, fp->rxq);
1315 1335
1336 if (fp->type & QEDE_FASTPATH_XDP)
1337 qede_free_mem_txq(edev, fp->xdp_tx);
1338
1316 if (fp->type & QEDE_FASTPATH_TX) 1339 if (fp->type & QEDE_FASTPATH_TX)
1317 qede_free_mem_txq(edev, fp->txq); 1340 qede_free_mem_txq(edev, fp->txq);
1318} 1341}
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c b/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
index 829be21f97b2..28ea0af89aef 100644
--- a/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
+++ b/drivers/net/ethernet/qlogic/qlge/qlge_dbg.c
@@ -765,7 +765,7 @@ int ql_core_dump(struct ql_adapter *qdev, struct ql_mpi_coredump *mpi_coredump)
765 sizeof(struct mpi_coredump_global_header); 765 sizeof(struct mpi_coredump_global_header);
766 mpi_coredump->mpi_global_header.imageSize = 766 mpi_coredump->mpi_global_header.imageSize =
767 sizeof(struct ql_mpi_coredump); 767 sizeof(struct ql_mpi_coredump);
768 memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump", 768 strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
769 sizeof(mpi_coredump->mpi_global_header.idString)); 769 sizeof(mpi_coredump->mpi_global_header.idString));
770 770
771 /* Get generic NIC reg dump */ 771 /* Get generic NIC reg dump */
@@ -1255,7 +1255,7 @@ static void ql_gen_reg_dump(struct ql_adapter *qdev,
1255 sizeof(struct mpi_coredump_global_header); 1255 sizeof(struct mpi_coredump_global_header);
1256 mpi_coredump->mpi_global_header.imageSize = 1256 mpi_coredump->mpi_global_header.imageSize =
1257 sizeof(struct ql_reg_dump); 1257 sizeof(struct ql_reg_dump);
1258 memcpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump", 1258 strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
1259 sizeof(mpi_coredump->mpi_global_header.idString)); 1259 sizeof(mpi_coredump->mpi_global_header.idString));
1260 1260
1261 1261
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index 39be96779145..22f910795be4 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -70,11 +70,8 @@ static int stmmac_pci_find_phy_addr(struct stmmac_pci_info *info)
70 return -ENODEV; 70 return -ENODEV;
71} 71}
72 72
73static void stmmac_default_data(struct plat_stmmacenet_data *plat) 73static void common_default_data(struct plat_stmmacenet_data *plat)
74{ 74{
75 plat->bus_id = 1;
76 plat->phy_addr = 0;
77 plat->interface = PHY_INTERFACE_MODE_GMII;
78 plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */ 75 plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */
79 plat->has_gmac = 1; 76 plat->has_gmac = 1;
80 plat->force_sf_dma_mode = 1; 77 plat->force_sf_dma_mode = 1;
@@ -82,10 +79,6 @@ static void stmmac_default_data(struct plat_stmmacenet_data *plat)
82 plat->mdio_bus_data->phy_reset = NULL; 79 plat->mdio_bus_data->phy_reset = NULL;
83 plat->mdio_bus_data->phy_mask = 0; 80 plat->mdio_bus_data->phy_mask = 0;
84 81
85 plat->dma_cfg->pbl = 32;
86 plat->dma_cfg->pblx8 = true;
87 /* TODO: AXI */
88
89 /* Set default value for multicast hash bins */ 82 /* Set default value for multicast hash bins */
90 plat->multicast_filter_bins = HASH_TABLE_SIZE; 83 plat->multicast_filter_bins = HASH_TABLE_SIZE;
91 84
@@ -107,12 +100,29 @@ static void stmmac_default_data(struct plat_stmmacenet_data *plat)
107 plat->rx_queues_cfg[0].pkt_route = 0x0; 100 plat->rx_queues_cfg[0].pkt_route = 0x0;
108} 101}
109 102
103static void stmmac_default_data(struct plat_stmmacenet_data *plat)
104{
105 /* Set common default data first */
106 common_default_data(plat);
107
108 plat->bus_id = 1;
109 plat->phy_addr = 0;
110 plat->interface = PHY_INTERFACE_MODE_GMII;
111
112 plat->dma_cfg->pbl = 32;
113 plat->dma_cfg->pblx8 = true;
114 /* TODO: AXI */
115}
116
110static int quark_default_data(struct plat_stmmacenet_data *plat, 117static int quark_default_data(struct plat_stmmacenet_data *plat,
111 struct stmmac_pci_info *info) 118 struct stmmac_pci_info *info)
112{ 119{
113 struct pci_dev *pdev = info->pdev; 120 struct pci_dev *pdev = info->pdev;
114 int ret; 121 int ret;
115 122
123 /* Set common default data first */
124 common_default_data(plat);
125
116 /* 126 /*
117 * Refuse to load the driver and register net device if MAC controller 127 * Refuse to load the driver and register net device if MAC controller
118 * does not connect to any PHY interface. 128 * does not connect to any PHY interface.
@@ -124,27 +134,12 @@ static int quark_default_data(struct plat_stmmacenet_data *plat,
124 plat->bus_id = PCI_DEVID(pdev->bus->number, pdev->devfn); 134 plat->bus_id = PCI_DEVID(pdev->bus->number, pdev->devfn);
125 plat->phy_addr = ret; 135 plat->phy_addr = ret;
126 plat->interface = PHY_INTERFACE_MODE_RMII; 136 plat->interface = PHY_INTERFACE_MODE_RMII;
127 plat->clk_csr = 2;
128 plat->has_gmac = 1;
129 plat->force_sf_dma_mode = 1;
130
131 plat->mdio_bus_data->phy_reset = NULL;
132 plat->mdio_bus_data->phy_mask = 0;
133 137
134 plat->dma_cfg->pbl = 16; 138 plat->dma_cfg->pbl = 16;
135 plat->dma_cfg->pblx8 = true; 139 plat->dma_cfg->pblx8 = true;
136 plat->dma_cfg->fixed_burst = 1; 140 plat->dma_cfg->fixed_burst = 1;
137 /* AXI (TODO) */ 141 /* AXI (TODO) */
138 142
139 /* Set default value for multicast hash bins */
140 plat->multicast_filter_bins = HASH_TABLE_SIZE;
141
142 /* Set default value for unicast filter entries */
143 plat->unicast_filter_entries = 1;
144
145 /* Set the maxmtu to a default of JUMBO_LEN */
146 plat->maxmtu = JUMBO_LEN;
147
148 return 0; 143 return 0;
149} 144}
150 145
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index fa674a8bda0c..f4d7aec50479 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -287,6 +287,10 @@ struct cpsw_ss_regs {
287/* Bit definitions for the CPSW1_TS_SEQ_LTYPE register */ 287/* Bit definitions for the CPSW1_TS_SEQ_LTYPE register */
288#define CPSW_V1_SEQ_ID_OFS_SHIFT 16 288#define CPSW_V1_SEQ_ID_OFS_SHIFT 16
289 289
290#define CPSW_MAX_BLKS_TX 15
291#define CPSW_MAX_BLKS_TX_SHIFT 4
292#define CPSW_MAX_BLKS_RX 5
293
290struct cpsw_host_regs { 294struct cpsw_host_regs {
291 u32 max_blks; 295 u32 max_blks;
292 u32 blk_cnt; 296 u32 blk_cnt;
@@ -1278,11 +1282,23 @@ static void cpsw_slave_open(struct cpsw_slave *slave, struct cpsw_priv *priv)
1278 switch (cpsw->version) { 1282 switch (cpsw->version) {
1279 case CPSW_VERSION_1: 1283 case CPSW_VERSION_1:
1280 slave_write(slave, TX_PRIORITY_MAPPING, CPSW1_TX_PRI_MAP); 1284 slave_write(slave, TX_PRIORITY_MAPPING, CPSW1_TX_PRI_MAP);
1285 /* Increase RX FIFO size to 5 for supporting fullduplex
1286 * flow control mode
1287 */
1288 slave_write(slave,
1289 (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
1290 CPSW_MAX_BLKS_RX, CPSW1_MAX_BLKS);
1281 break; 1291 break;
1282 case CPSW_VERSION_2: 1292 case CPSW_VERSION_2:
1283 case CPSW_VERSION_3: 1293 case CPSW_VERSION_3:
1284 case CPSW_VERSION_4: 1294 case CPSW_VERSION_4:
1285 slave_write(slave, TX_PRIORITY_MAPPING, CPSW2_TX_PRI_MAP); 1295 slave_write(slave, TX_PRIORITY_MAPPING, CPSW2_TX_PRI_MAP);
1296 /* Increase RX FIFO size to 5 for supporting fullduplex
1297 * flow control mode
1298 */
1299 slave_write(slave,
1300 (CPSW_MAX_BLKS_TX << CPSW_MAX_BLKS_TX_SHIFT) |
1301 CPSW_MAX_BLKS_RX, CPSW2_MAX_BLKS);
1286 break; 1302 break;
1287 } 1303 }
1288 1304
diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
index b6891ada1d7b..7a7c5224a336 100644
--- a/drivers/net/hamradio/yam.c
+++ b/drivers/net/hamradio/yam.c
@@ -976,12 +976,10 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
976 case SIOCYAMSMCS: 976 case SIOCYAMSMCS:
977 if (netif_running(dev)) 977 if (netif_running(dev))
978 return -EINVAL; /* Cannot change this parameter when up */ 978 return -EINVAL; /* Cannot change this parameter when up */
979 if ((ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_KERNEL)) == NULL) 979 ym = memdup_user(ifr->ifr_data,
980 return -ENOBUFS; 980 sizeof(struct yamdrv_ioctl_mcs));
981 if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs))) { 981 if (IS_ERR(ym))
982 kfree(ym); 982 return PTR_ERR(ym);
983 return -EFAULT;
984 }
985 if (ym->bitrate > YAM_MAXBITRATE) { 983 if (ym->bitrate > YAM_MAXBITRATE) {
986 kfree(ym); 984 kfree(ym);
987 return -EINVAL; 985 return -EINVAL;
diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
index 9b0d6148e994..1ce6239a4849 100644
--- a/drivers/net/hippi/rrunner.c
+++ b/drivers/net/hippi/rrunner.c
@@ -1616,17 +1616,14 @@ static int rr_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1616 return -EPERM; 1616 return -EPERM;
1617 } 1617 }
1618 1618
1619 image = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); 1619 image = memdup_user(rq->ifr_data, EEPROM_BYTES);
1620 oldimage = kmalloc(EEPROM_WORDS * sizeof(u32), GFP_KERNEL); 1620 if (IS_ERR(image))
1621 if (!image || !oldimage) { 1621 return PTR_ERR(image);
1622 error = -ENOMEM;
1623 goto wf_out;
1624 }
1625 1622
1626 error = copy_from_user(image, rq->ifr_data, EEPROM_BYTES); 1623 oldimage = kmalloc(EEPROM_BYTES, GFP_KERNEL);
1627 if (error) { 1624 if (!oldimage) {
1628 error = -EFAULT; 1625 kfree(image);
1629 goto wf_out; 1626 return -ENOMEM;
1630 } 1627 }
1631 1628
1632 if (rrpriv->fw_running){ 1629 if (rrpriv->fw_running){
diff --git a/drivers/net/phy/mdio-mux-bcm-iproc.c b/drivers/net/phy/mdio-mux-bcm-iproc.c
index 0a0412524cec..0a5f62e0efcc 100644
--- a/drivers/net/phy/mdio-mux-bcm-iproc.c
+++ b/drivers/net/phy/mdio-mux-bcm-iproc.c
@@ -203,11 +203,14 @@ static int mdio_mux_iproc_probe(struct platform_device *pdev)
203 &md->mux_handle, md, md->mii_bus); 203 &md->mux_handle, md, md->mii_bus);
204 if (rc) { 204 if (rc) {
205 dev_info(md->dev, "mdiomux initialization failed\n"); 205 dev_info(md->dev, "mdiomux initialization failed\n");
206 goto out; 206 goto out_register;
207 } 207 }
208 208
209 dev_info(md->dev, "iProc mdiomux registered\n"); 209 dev_info(md->dev, "iProc mdiomux registered\n");
210 return 0; 210 return 0;
211
212out_register:
213 mdiobus_unregister(bus);
211out: 214out:
212 mdiobus_free(bus); 215 mdiobus_free(bus);
213 return rc; 216 return rc;
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index bb3f71f9fbde..b5cec1824a78 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -1088,6 +1088,7 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
1088 u16 n = 0, index, ndplen; 1088 u16 n = 0, index, ndplen;
1089 u8 ready2send = 0; 1089 u8 ready2send = 0;
1090 u32 delayed_ndp_size; 1090 u32 delayed_ndp_size;
1091 size_t padding_count;
1091 1092
1092 /* When our NDP gets written in cdc_ncm_ndp(), then skb_out->len gets updated 1093 /* When our NDP gets written in cdc_ncm_ndp(), then skb_out->len gets updated
1093 * accordingly. Otherwise, we should check here. 1094 * accordingly. Otherwise, we should check here.
@@ -1244,11 +1245,13 @@ cdc_ncm_fill_tx_frame(struct usbnet *dev, struct sk_buff *skb, __le32 sign)
1244 * a ZLP after full sized NTBs. 1245 * a ZLP after full sized NTBs.
1245 */ 1246 */
1246 if (!(dev->driver_info->flags & FLAG_SEND_ZLP) && 1247 if (!(dev->driver_info->flags & FLAG_SEND_ZLP) &&
1247 skb_out->len > ctx->min_tx_pkt) 1248 skb_out->len > ctx->min_tx_pkt) {
1248 memset(skb_put(skb_out, ctx->tx_max - skb_out->len), 0, 1249 padding_count = ctx->tx_max - skb_out->len;
1249 ctx->tx_max - skb_out->len); 1250 memset(skb_put(skb_out, padding_count), 0, padding_count);
1250 else if (skb_out->len < ctx->tx_max && (skb_out->len % dev->maxpacket) == 0) 1251 } else if (skb_out->len < ctx->tx_max &&
1252 (skb_out->len % dev->maxpacket) == 0) {
1251 *skb_put(skb_out, 1) = 0; /* force short packet */ 1253 *skb_put(skb_out, 1) = 0; /* force short packet */
1254 }
1252 1255
1253 /* set final frame length */ 1256 /* set final frame length */
1254 nth16 = (struct usb_cdc_ncm_nth16 *)skb_out->data; 1257 nth16 = (struct usb_cdc_ncm_nth16 *)skb_out->data;
diff --git a/drivers/net/wimax/i2400m/i2400m-usb.h b/drivers/net/wimax/i2400m/i2400m-usb.h
index 649ecad6844c..eff4f464a23e 100644
--- a/drivers/net/wimax/i2400m/i2400m-usb.h
+++ b/drivers/net/wimax/i2400m/i2400m-usb.h
@@ -131,7 +131,7 @@ static inline int edc_inc(struct edc *edc, u16 max_err, u16 timeframe)
131 unsigned long now; 131 unsigned long now;
132 132
133 now = jiffies; 133 now = jiffies;
134 if (now - edc->timestart > timeframe) { 134 if (time_after(now, edc->timestart + timeframe)) {
135 edc->errorcount = 1; 135 edc->errorcount = 1;
136 edc->timestart = now; 136 edc->timestart = now;
137 } else if (++edc->errorcount > max_err) { 137 } else if (++edc->errorcount > max_err) {
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
index 68fcbe03bce2..b3f20b3c0210 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
@@ -522,7 +522,7 @@ int ath9k_hw_process_rxdesc_edma(struct ath_hw *ah, struct ath_rx_status *rxs,
522 rxs->rs_moreaggr = (rxsp->status11 & AR_RxMoreAggr) ? 1 : 0; 522 rxs->rs_moreaggr = (rxsp->status11 & AR_RxMoreAggr) ? 1 : 0;
523 rxs->rs_antenna = (MS(rxsp->status4, AR_RxAntenna) & 0x7); 523 rxs->rs_antenna = (MS(rxsp->status4, AR_RxAntenna) & 0x7);
524 rxs->enc_flags |= (rxsp->status4 & AR_GI) ? RX_ENC_FLAG_SHORT_GI : 0; 524 rxs->enc_flags |= (rxsp->status4 & AR_GI) ? RX_ENC_FLAG_SHORT_GI : 0;
525 rxs->enc_flags |= (rxsp->status4 & AR_2040) ? RX_ENC_FLAG_40MHZ : 0; 525 rxs->bw = (rxsp->status4 & AR_2040) ? RATE_INFO_BW_40 : RATE_INFO_BW_20;
526 526
527 rxs->evm0 = rxsp->status6; 527 rxs->evm0 = rxsp->status6;
528 rxs->evm1 = rxsp->status7; 528 rxs->evm1 = rxsp->status7;
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
index 6128c2bb23d8..77c94f9e7b61 100644
--- a/drivers/net/wireless/ath/ath9k/mac.c
+++ b/drivers/net/wireless/ath/ath9k/mac.c
@@ -580,8 +580,8 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
580 /* directly mapped flags for ieee80211_rx_status */ 580 /* directly mapped flags for ieee80211_rx_status */
581 rs->enc_flags |= 581 rs->enc_flags |=
582 (ads.ds_rxstatus3 & AR_GI) ? RX_ENC_FLAG_SHORT_GI : 0; 582 (ads.ds_rxstatus3 & AR_GI) ? RX_ENC_FLAG_SHORT_GI : 0;
583 rs->enc_flags |= 583 rs->bw = (ads.ds_rxstatus3 & AR_2040) ? RATE_INFO_BW_40 :
584 (ads.ds_rxstatus3 & AR_2040) ? RX_ENC_FLAG_40MHZ : 0; 584 RATE_INFO_BW_20;
585 if (AR_SREV_9280_20_OR_LATER(ah)) 585 if (AR_SREV_9280_20_OR_LATER(ah))
586 rs->enc_flags |= 586 rs->enc_flags |=
587 (ads.ds_rxstatus3 & AR_STBC) ? 587 (ads.ds_rxstatus3 & AR_STBC) ?
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index 5d5faa3cad24..49a2ff15ddae 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -734,7 +734,9 @@ il4965_hdl_rx(struct il_priv *il, struct il_rx_buf *rxb)
734 if (rate_n_flags & RATE_MCS_HT_MSK) 734 if (rate_n_flags & RATE_MCS_HT_MSK)
735 rx_status.encoding = RX_ENC_HT; 735 rx_status.encoding = RX_ENC_HT;
736 if (rate_n_flags & RATE_MCS_HT40_MSK) 736 if (rate_n_flags & RATE_MCS_HT40_MSK)
737 rx_status.enc_flags |= RX_ENC_FLAG_40MHZ; 737 rx_status.bw = RATE_INFO_BW_40;
738 else
739 rx_status.bw = RATE_INFO_BW_20;
738 if (rate_n_flags & RATE_MCS_SGI_MSK) 740 if (rate_n_flags & RATE_MCS_SGI_MSK)
739 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI; 741 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI;
740 742
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/rx.c b/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
index 1ee1ba9931a7..adfd6307edca 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/rx.c
@@ -889,7 +889,9 @@ static void iwlagn_rx_reply_rx(struct iwl_priv *priv,
889 if (rate_n_flags & RATE_MCS_HT_MSK) 889 if (rate_n_flags & RATE_MCS_HT_MSK)
890 rx_status.encoding = RX_ENC_HT; 890 rx_status.encoding = RX_ENC_HT;
891 if (rate_n_flags & RATE_MCS_HT40_MSK) 891 if (rate_n_flags & RATE_MCS_HT40_MSK)
892 rx_status.enc_flags |= RX_ENC_FLAG_40MHZ; 892 rx_status.bw = RATE_INFO_BW_40;
893 else
894 rx_status.bw = RATE_INFO_BW_20;
893 if (rate_n_flags & RATE_MCS_SGI_MSK) 895 if (rate_n_flags & RATE_MCS_SGI_MSK)
894 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI; 896 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI;
895 if (rate_n_flags & RATE_MCS_GF_MSK) 897 if (rate_n_flags & RATE_MCS_GF_MSK)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 87444af20fc5..002b25cff5b6 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1201,7 +1201,13 @@ static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
1201 rx_status.encoding = RX_ENC_HT; 1201 rx_status.encoding = RX_ENC_HT;
1202 } 1202 }
1203 if (info->control.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH) 1203 if (info->control.rates[0].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
1204 rx_status.enc_flags |= RX_ENC_FLAG_40MHZ; 1204 rx_status.bw = RATE_INFO_BW_40;
1205 else if (info->control.rates[0].flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
1206 rx_status.bw = RATE_INFO_BW_80;
1207 else if (info->control.rates[0].flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
1208 rx_status.bw = RATE_INFO_BW_160;
1209 else
1210 rx_status.bw = RATE_INFO_BW_20;
1205 if (info->control.rates[0].flags & IEEE80211_TX_RC_SHORT_GI) 1211 if (info->control.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
1206 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI; 1212 rx_status.enc_flags |= RX_ENC_FLAG_SHORT_GI;
1207 /* TODO: simulate real signal strength (and optional packet loss) */ 1213 /* TODO: simulate real signal strength (and optional packet loss) */
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 2452e6449532..b43a4eec3cec 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -20,6 +20,8 @@
20#define ADDRCONF_TIMER_FUZZ (HZ / 4) 20#define ADDRCONF_TIMER_FUZZ (HZ / 4)
21#define ADDRCONF_TIMER_FUZZ_MAX (HZ) 21#define ADDRCONF_TIMER_FUZZ_MAX (HZ)
22 22
23#define ADDRCONF_NOTIFY_PRIORITY 0
24
23#include <linux/in.h> 25#include <linux/in.h>
24#include <linux/in6.h> 26#include <linux/in6.h>
25 27
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 15d6599b8bc6..b083e6cbae8c 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1666,7 +1666,7 @@ struct cfg80211_bss_select_adjust {
1666 * (others are filtered out). 1666 * (others are filtered out).
1667 * If ommited, all results are passed. 1667 * If ommited, all results are passed.
1668 * @n_match_sets: number of match sets 1668 * @n_match_sets: number of match sets
1669 * @results_wk: worker for processing results notification. 1669 * @report_results: indicates that results were reported for this request
1670 * @wiphy: the wiphy this was for 1670 * @wiphy: the wiphy this was for
1671 * @dev: the interface 1671 * @dev: the interface
1672 * @scan_start: start time of the scheduled scan 1672 * @scan_start: start time of the scheduled scan
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 4d05a9443344..76ed24a201eb 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -1141,7 +1141,6 @@ enum mac80211_rx_flags {
1141 * enum mac80211_rx_encoding_flags - MCS & bandwidth flags 1141 * enum mac80211_rx_encoding_flags - MCS & bandwidth flags
1142 * 1142 *
1143 * @RX_ENC_FLAG_SHORTPRE: Short preamble was used for this frame 1143 * @RX_ENC_FLAG_SHORTPRE: Short preamble was used for this frame
1144 * @RX_ENC_FLAG_40MHZ: HT40 (40 MHz) was used
1145 * @RX_ENC_FLAG_SHORT_GI: Short guard interval was used 1144 * @RX_ENC_FLAG_SHORT_GI: Short guard interval was used
1146 * @RX_ENC_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, 1145 * @RX_ENC_FLAG_HT_GF: This frame was received in a HT-greenfield transmission,
1147 * if the driver fills this value it should add 1146 * if the driver fills this value it should add
@@ -1153,7 +1152,6 @@ enum mac80211_rx_flags {
1153 */ 1152 */
1154enum mac80211_rx_encoding_flags { 1153enum mac80211_rx_encoding_flags {
1155 RX_ENC_FLAG_SHORTPRE = BIT(0), 1154 RX_ENC_FLAG_SHORTPRE = BIT(0),
1156 RX_ENC_FLAG_40MHZ = BIT(1),
1157 RX_ENC_FLAG_SHORT_GI = BIT(2), 1155 RX_ENC_FLAG_SHORT_GI = BIT(2),
1158 RX_ENC_FLAG_HT_GF = BIT(3), 1156 RX_ENC_FLAG_HT_GF = BIT(3),
1159 RX_ENC_FLAG_STBC_MASK = BIT(4) | BIT(5), 1157 RX_ENC_FLAG_STBC_MASK = BIT(4) | BIT(5),
diff --git a/include/net/secure_seq.h b/include/net/secure_seq.h
index fe236b3429f0..b94006f6fbdd 100644
--- a/include/net/secure_seq.h
+++ b/include/net/secure_seq.h
@@ -6,10 +6,12 @@
6u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport); 6u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport);
7u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, 7u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
8 __be16 dport); 8 __be16 dport);
9u32 secure_tcp_seq_and_tsoff(__be32 saddr, __be32 daddr, 9u32 secure_tcp_seq(__be32 saddr, __be32 daddr,
10 __be16 sport, __be16 dport, u32 *tsoff); 10 __be16 sport, __be16 dport);
11u32 secure_tcpv6_seq_and_tsoff(const __be32 *saddr, const __be32 *daddr, 11u32 secure_tcp_ts_off(__be32 saddr, __be32 daddr);
12 __be16 sport, __be16 dport, u32 *tsoff); 12u32 secure_tcpv6_seq(const __be32 *saddr, const __be32 *daddr,
13 __be16 sport, __be16 dport);
14u32 secure_tcpv6_ts_off(const __be32 *saddr, const __be32 *daddr);
13u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, 15u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr,
14 __be16 sport, __be16 dport); 16 __be16 sport, __be16 dport);
15u64 secure_dccpv6_sequence_number(__be32 *saddr, __be32 *daddr, 17u64 secure_dccpv6_sequence_number(__be32 *saddr, __be32 *daddr,
diff --git a/include/net/tcp.h b/include/net/tcp.h
index 270e5cc43c99..38a7427ae902 100644
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -470,7 +470,7 @@ void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb);
470/* From syncookies.c */ 470/* From syncookies.c */
471struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb, 471struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
472 struct request_sock *req, 472 struct request_sock *req,
473 struct dst_entry *dst); 473 struct dst_entry *dst, u32 tsoff);
474int __cookie_v4_check(const struct iphdr *iph, const struct tcphdr *th, 474int __cookie_v4_check(const struct iphdr *iph, const struct tcphdr *th,
475 u32 cookie); 475 u32 cookie);
476struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb); 476struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
@@ -1234,10 +1234,12 @@ void tcp_cwnd_restart(struct sock *sk, s32 delta);
1234 1234
1235static inline void tcp_slow_start_after_idle_check(struct sock *sk) 1235static inline void tcp_slow_start_after_idle_check(struct sock *sk)
1236{ 1236{
1237 const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
1237 struct tcp_sock *tp = tcp_sk(sk); 1238 struct tcp_sock *tp = tcp_sk(sk);
1238 s32 delta; 1239 s32 delta;
1239 1240
1240 if (!sysctl_tcp_slow_start_after_idle || tp->packets_out) 1241 if (!sysctl_tcp_slow_start_after_idle || tp->packets_out ||
1242 ca_ops->cong_control)
1241 return; 1243 return;
1242 delta = tcp_time_stamp - tp->lsndtime; 1244 delta = tcp_time_stamp - tp->lsndtime;
1243 if (delta > inet_csk(sk)->icsk_rto) 1245 if (delta > inet_csk(sk)->icsk_rto)
@@ -1822,7 +1824,8 @@ struct tcp_request_sock_ops {
1822#endif 1824#endif
1823 struct dst_entry *(*route_req)(const struct sock *sk, struct flowi *fl, 1825 struct dst_entry *(*route_req)(const struct sock *sk, struct flowi *fl,
1824 const struct request_sock *req); 1826 const struct request_sock *req);
1825 __u32 (*init_seq_tsoff)(const struct sk_buff *skb, u32 *tsoff); 1827 u32 (*init_seq)(const struct sk_buff *skb);
1828 u32 (*init_ts_off)(const struct sk_buff *skb);
1826 int (*send_synack)(const struct sock *sk, struct dst_entry *dst, 1829 int (*send_synack)(const struct sock *sk, struct dst_entry *dst,
1827 struct flowi *fl, struct request_sock *req, 1830 struct flowi *fl, struct request_sock *req,
1828 struct tcp_fastopen_cookie *foc, 1831 struct tcp_fastopen_cookie *foc,
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index c2ff608c1984..c5b56c92f8e2 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -298,7 +298,8 @@ static const char *const bpf_jmp_string[16] = {
298 [BPF_EXIT >> 4] = "exit", 298 [BPF_EXIT >> 4] = "exit",
299}; 299};
300 300
301static void print_bpf_insn(struct bpf_insn *insn) 301static void print_bpf_insn(const struct bpf_verifier_env *env,
302 const struct bpf_insn *insn)
302{ 303{
303 u8 class = BPF_CLASS(insn->code); 304 u8 class = BPF_CLASS(insn->code);
304 305
@@ -362,9 +363,19 @@ static void print_bpf_insn(struct bpf_insn *insn)
362 insn->code, 363 insn->code,
363 bpf_ldst_string[BPF_SIZE(insn->code) >> 3], 364 bpf_ldst_string[BPF_SIZE(insn->code) >> 3],
364 insn->src_reg, insn->imm); 365 insn->src_reg, insn->imm);
365 } else if (BPF_MODE(insn->code) == BPF_IMM) { 366 } else if (BPF_MODE(insn->code) == BPF_IMM &&
366 verbose("(%02x) r%d = 0x%x\n", 367 BPF_SIZE(insn->code) == BPF_DW) {
367 insn->code, insn->dst_reg, insn->imm); 368 /* At this point, we already made sure that the second
369 * part of the ldimm64 insn is accessible.
370 */
371 u64 imm = ((u64)(insn + 1)->imm << 32) | (u32)insn->imm;
372 bool map_ptr = insn->src_reg == BPF_PSEUDO_MAP_FD;
373
374 if (map_ptr && !env->allow_ptr_leaks)
375 imm = 0;
376
377 verbose("(%02x) r%d = 0x%llx\n", insn->code,
378 insn->dst_reg, (unsigned long long)imm);
368 } else { 379 } else {
369 verbose("BUG_ld_%02x\n", insn->code); 380 verbose("BUG_ld_%02x\n", insn->code);
370 return; 381 return;
@@ -2853,7 +2864,7 @@ static int do_check(struct bpf_verifier_env *env)
2853 2864
2854 if (log_level) { 2865 if (log_level) {
2855 verbose("%d: ", insn_idx); 2866 verbose("%d: ", insn_idx);
2856 print_bpf_insn(insn); 2867 print_bpf_insn(env, insn);
2857 } 2868 }
2858 2869
2859 err = ext_analyzer_insn_hook(env, insn_idx, prev_insn_idx); 2870 err = ext_analyzer_insn_hook(env, insn_idx, prev_insn_idx);
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 9ee5787634e5..953b6728bd00 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -626,11 +626,18 @@ static netdev_features_t vlan_dev_fix_features(struct net_device *dev,
626{ 626{
627 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev; 627 struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
628 netdev_features_t old_features = features; 628 netdev_features_t old_features = features;
629 netdev_features_t lower_features;
629 630
630 features = netdev_intersect_features(features, real_dev->vlan_features); 631 lower_features = netdev_intersect_features((real_dev->vlan_features |
631 features |= NETIF_F_RXCSUM; 632 NETIF_F_RXCSUM),
632 features = netdev_intersect_features(features, real_dev->features); 633 real_dev->features);
633 634
635 /* Add HW_CSUM setting to preserve user ability to control
636 * checksum offload on the vlan device.
637 */
638 if (lower_features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))
639 lower_features |= NETIF_F_HW_CSUM;
640 features = netdev_intersect_features(features, lower_features);
634 features |= old_features & (NETIF_F_SOFT_FEATURES | NETIF_F_GSO_SOFTWARE); 641 features |= old_features & (NETIF_F_SOFT_FEATURES | NETIF_F_GSO_SOFTWARE);
635 features |= NETIF_F_LLTX; 642 features |= NETIF_F_LLTX;
636 643
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index a572db710d4e..c5ce7745b230 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -133,6 +133,8 @@ static inline size_t br_port_info_size(void)
133 + nla_total_size(1) /* IFLA_BRPORT_MCAST_TO_UCAST */ 133 + nla_total_size(1) /* IFLA_BRPORT_MCAST_TO_UCAST */
134 + nla_total_size(1) /* IFLA_BRPORT_LEARNING */ 134 + nla_total_size(1) /* IFLA_BRPORT_LEARNING */
135 + nla_total_size(1) /* IFLA_BRPORT_UNICAST_FLOOD */ 135 + nla_total_size(1) /* IFLA_BRPORT_UNICAST_FLOOD */
136 + nla_total_size(1) /* IFLA_BRPORT_MCAST_FLOOD */
137 + nla_total_size(1) /* IFLA_BRPORT_BCAST_FLOOD */
136 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP */ 138 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP */
137 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */ 139 + nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */
138 + nla_total_size(1) /* IFLA_BRPORT_VLAN_TUNNEL */ 140 + nla_total_size(1) /* IFLA_BRPORT_VLAN_TUNNEL */
@@ -633,6 +635,8 @@ static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
633 [IFLA_BRPORT_PROXYARP_WIFI] = { .type = NLA_U8 }, 635 [IFLA_BRPORT_PROXYARP_WIFI] = { .type = NLA_U8 },
634 [IFLA_BRPORT_MULTICAST_ROUTER] = { .type = NLA_U8 }, 636 [IFLA_BRPORT_MULTICAST_ROUTER] = { .type = NLA_U8 },
635 [IFLA_BRPORT_MCAST_TO_UCAST] = { .type = NLA_U8 }, 637 [IFLA_BRPORT_MCAST_TO_UCAST] = { .type = NLA_U8 },
638 [IFLA_BRPORT_MCAST_FLOOD] = { .type = NLA_U8 },
639 [IFLA_BRPORT_BCAST_FLOOD] = { .type = NLA_U8 },
636}; 640};
637 641
638/* Change the state of the port and notify spanning tree */ 642/* Change the state of the port and notify spanning tree */
diff --git a/net/core/secure_seq.c b/net/core/secure_seq.c
index 6bd2f8fb0476..ae35cce3a40d 100644
--- a/net/core/secure_seq.c
+++ b/net/core/secure_seq.c
@@ -24,9 +24,13 @@ static siphash_key_t ts_secret __read_mostly;
24 24
25static __always_inline void net_secret_init(void) 25static __always_inline void net_secret_init(void)
26{ 26{
27 net_get_random_once(&ts_secret, sizeof(ts_secret));
28 net_get_random_once(&net_secret, sizeof(net_secret)); 27 net_get_random_once(&net_secret, sizeof(net_secret));
29} 28}
29
30static __always_inline void ts_secret_init(void)
31{
32 net_get_random_once(&ts_secret, sizeof(ts_secret));
33}
30#endif 34#endif
31 35
32#ifdef CONFIG_INET 36#ifdef CONFIG_INET
@@ -47,7 +51,7 @@ static u32 seq_scale(u32 seq)
47#endif 51#endif
48 52
49#if IS_ENABLED(CONFIG_IPV6) 53#if IS_ENABLED(CONFIG_IPV6)
50static u32 secure_tcpv6_ts_off(const __be32 *saddr, const __be32 *daddr) 54u32 secure_tcpv6_ts_off(const __be32 *saddr, const __be32 *daddr)
51{ 55{
52 const struct { 56 const struct {
53 struct in6_addr saddr; 57 struct in6_addr saddr;
@@ -60,12 +64,14 @@ static u32 secure_tcpv6_ts_off(const __be32 *saddr, const __be32 *daddr)
60 if (sysctl_tcp_timestamps != 1) 64 if (sysctl_tcp_timestamps != 1)
61 return 0; 65 return 0;
62 66
67 ts_secret_init();
63 return siphash(&combined, offsetofend(typeof(combined), daddr), 68 return siphash(&combined, offsetofend(typeof(combined), daddr),
64 &ts_secret); 69 &ts_secret);
65} 70}
71EXPORT_SYMBOL(secure_tcpv6_ts_off);
66 72
67u32 secure_tcpv6_seq_and_tsoff(const __be32 *saddr, const __be32 *daddr, 73u32 secure_tcpv6_seq(const __be32 *saddr, const __be32 *daddr,
68 __be16 sport, __be16 dport, u32 *tsoff) 74 __be16 sport, __be16 dport)
69{ 75{
70 const struct { 76 const struct {
71 struct in6_addr saddr; 77 struct in6_addr saddr;
@@ -78,14 +84,14 @@ u32 secure_tcpv6_seq_and_tsoff(const __be32 *saddr, const __be32 *daddr,
78 .sport = sport, 84 .sport = sport,
79 .dport = dport 85 .dport = dport
80 }; 86 };
81 u64 hash; 87 u32 hash;
88
82 net_secret_init(); 89 net_secret_init();
83 hash = siphash(&combined, offsetofend(typeof(combined), dport), 90 hash = siphash(&combined, offsetofend(typeof(combined), dport),
84 &net_secret); 91 &net_secret);
85 *tsoff = secure_tcpv6_ts_off(saddr, daddr);
86 return seq_scale(hash); 92 return seq_scale(hash);
87} 93}
88EXPORT_SYMBOL(secure_tcpv6_seq_and_tsoff); 94EXPORT_SYMBOL(secure_tcpv6_seq);
89 95
90u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr, 96u32 secure_ipv6_port_ephemeral(const __be32 *saddr, const __be32 *daddr,
91 __be16 dport) 97 __be16 dport)
@@ -107,11 +113,12 @@ EXPORT_SYMBOL(secure_ipv6_port_ephemeral);
107#endif 113#endif
108 114
109#ifdef CONFIG_INET 115#ifdef CONFIG_INET
110static u32 secure_tcp_ts_off(__be32 saddr, __be32 daddr) 116u32 secure_tcp_ts_off(__be32 saddr, __be32 daddr)
111{ 117{
112 if (sysctl_tcp_timestamps != 1) 118 if (sysctl_tcp_timestamps != 1)
113 return 0; 119 return 0;
114 120
121 ts_secret_init();
115 return siphash_2u32((__force u32)saddr, (__force u32)daddr, 122 return siphash_2u32((__force u32)saddr, (__force u32)daddr,
116 &ts_secret); 123 &ts_secret);
117} 124}
@@ -121,15 +128,15 @@ static u32 secure_tcp_ts_off(__be32 saddr, __be32 daddr)
121 * it would be easy enough to have the former function use siphash_4u32, passing 128 * it would be easy enough to have the former function use siphash_4u32, passing
122 * the arguments as separate u32. 129 * the arguments as separate u32.
123 */ 130 */
124u32 secure_tcp_seq_and_tsoff(__be32 saddr, __be32 daddr, 131u32 secure_tcp_seq(__be32 saddr, __be32 daddr,
125 __be16 sport, __be16 dport, u32 *tsoff) 132 __be16 sport, __be16 dport)
126{ 133{
127 u64 hash; 134 u32 hash;
135
128 net_secret_init(); 136 net_secret_init();
129 hash = siphash_3u32((__force u32)saddr, (__force u32)daddr, 137 hash = siphash_3u32((__force u32)saddr, (__force u32)daddr,
130 (__force u32)sport << 16 | (__force u32)dport, 138 (__force u32)sport << 16 | (__force u32)dport,
131 &net_secret); 139 &net_secret);
132 *tsoff = secure_tcp_ts_off(saddr, daddr);
133 return seq_scale(hash); 140 return seq_scale(hash);
134} 141}
135 142
diff --git a/net/decnet/dn_neigh.c b/net/decnet/dn_neigh.c
index 482730cd8a56..eeb5fc561f80 100644
--- a/net/decnet/dn_neigh.c
+++ b/net/decnet/dn_neigh.c
@@ -110,7 +110,7 @@ struct neigh_table dn_neigh_table = {
110static int dn_neigh_construct(struct neighbour *neigh) 110static int dn_neigh_construct(struct neighbour *neigh)
111{ 111{
112 struct net_device *dev = neigh->dev; 112 struct net_device *dev = neigh->dev;
113 struct dn_neigh *dn = (struct dn_neigh *)neigh; 113 struct dn_neigh *dn = container_of(neigh, struct dn_neigh, n);
114 struct dn_dev *dn_db; 114 struct dn_dev *dn_db;
115 struct neigh_parms *parms; 115 struct neigh_parms *parms;
116 116
@@ -339,7 +339,7 @@ int dn_to_neigh_output(struct net *net, struct sock *sk, struct sk_buff *skb)
339 struct dst_entry *dst = skb_dst(skb); 339 struct dst_entry *dst = skb_dst(skb);
340 struct dn_route *rt = (struct dn_route *) dst; 340 struct dn_route *rt = (struct dn_route *) dst;
341 struct neighbour *neigh = rt->n; 341 struct neighbour *neigh = rt->n;
342 struct dn_neigh *dn = (struct dn_neigh *)neigh; 342 struct dn_neigh *dn = container_of(neigh, struct dn_neigh, n);
343 struct dn_dev *dn_db; 343 struct dn_dev *dn_db;
344 bool use_long; 344 bool use_long;
345 345
@@ -391,7 +391,7 @@ int dn_neigh_router_hello(struct net *net, struct sock *sk, struct sk_buff *skb)
391 391
392 neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1); 392 neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1);
393 393
394 dn = (struct dn_neigh *)neigh; 394 dn = container_of(neigh, struct dn_neigh, n);
395 395
396 if (neigh) { 396 if (neigh) {
397 write_lock(&neigh->lock); 397 write_lock(&neigh->lock);
@@ -451,7 +451,7 @@ int dn_neigh_endnode_hello(struct net *net, struct sock *sk, struct sk_buff *skb
451 451
452 neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1); 452 neigh = __neigh_lookup(&dn_neigh_table, &src, skb->dev, 1);
453 453
454 dn = (struct dn_neigh *)neigh; 454 dn = container_of(neigh, struct dn_neigh, n);
455 455
456 if (neigh) { 456 if (neigh) {
457 write_lock(&neigh->lock); 457 write_lock(&neigh->lock);
@@ -510,7 +510,7 @@ static void neigh_elist_cb(struct neighbour *neigh, void *_info)
510 if (neigh->dev != s->dev) 510 if (neigh->dev != s->dev)
511 return; 511 return;
512 512
513 dn = (struct dn_neigh *) neigh; 513 dn = container_of(neigh, struct dn_neigh, n);
514 if (!(dn->flags & (DN_NDFLAG_R1|DN_NDFLAG_R2))) 514 if (!(dn->flags & (DN_NDFLAG_R1|DN_NDFLAG_R2)))
515 return; 515 return;
516 516
@@ -549,7 +549,7 @@ int dn_neigh_elist(struct net_device *dev, unsigned char *ptr, int n)
549static inline void dn_neigh_format_entry(struct seq_file *seq, 549static inline void dn_neigh_format_entry(struct seq_file *seq,
550 struct neighbour *n) 550 struct neighbour *n)
551{ 551{
552 struct dn_neigh *dn = (struct dn_neigh *) n; 552 struct dn_neigh *dn = container_of(n, struct dn_neigh, n);
553 char buf[DN_ASCBUF_LEN]; 553 char buf[DN_ASCBUF_LEN];
554 554
555 read_lock(&n->lock); 555 read_lock(&n->lock);
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index 5e313c1ac94f..1054d330bf9d 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -794,6 +794,8 @@ struct sock *inet_csk_clone_lock(const struct sock *sk,
794 /* listeners have SOCK_RCU_FREE, not the children */ 794 /* listeners have SOCK_RCU_FREE, not the children */
795 sock_reset_flag(newsk, SOCK_RCU_FREE); 795 sock_reset_flag(newsk, SOCK_RCU_FREE);
796 796
797 inet_sk(newsk)->mc_list = NULL;
798
797 newsk->sk_mark = inet_rsk(req)->ir_mark; 799 newsk->sk_mark = inet_rsk(req)->ir_mark;
798 atomic64_set(&newsk->sk_cookie, 800 atomic64_set(&newsk->sk_cookie,
799 atomic64_read(&inet_rsk(req)->ir_cookie)); 801 atomic64_read(&inet_rsk(req)->ir_cookie));
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index 40977413fd48..4ec9affb2252 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -546,12 +546,13 @@ static int vti_fill_info(struct sk_buff *skb, const struct net_device *dev)
546 struct ip_tunnel *t = netdev_priv(dev); 546 struct ip_tunnel *t = netdev_priv(dev);
547 struct ip_tunnel_parm *p = &t->parms; 547 struct ip_tunnel_parm *p = &t->parms;
548 548
549 nla_put_u32(skb, IFLA_VTI_LINK, p->link); 549 if (nla_put_u32(skb, IFLA_VTI_LINK, p->link) ||
550 nla_put_be32(skb, IFLA_VTI_IKEY, p->i_key); 550 nla_put_be32(skb, IFLA_VTI_IKEY, p->i_key) ||
551 nla_put_be32(skb, IFLA_VTI_OKEY, p->o_key); 551 nla_put_be32(skb, IFLA_VTI_OKEY, p->o_key) ||
552 nla_put_in_addr(skb, IFLA_VTI_LOCAL, p->iph.saddr); 552 nla_put_in_addr(skb, IFLA_VTI_LOCAL, p->iph.saddr) ||
553 nla_put_in_addr(skb, IFLA_VTI_REMOTE, p->iph.daddr); 553 nla_put_in_addr(skb, IFLA_VTI_REMOTE, p->iph.daddr) ||
554 nla_put_u32(skb, IFLA_VTI_FWMARK, t->fwmark); 554 nla_put_u32(skb, IFLA_VTI_FWMARK, t->fwmark))
555 return -EMSGSIZE;
555 556
556 return 0; 557 return 0;
557} 558}
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index 496b97e17aaf..0257d965f111 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -16,6 +16,7 @@
16#include <linux/siphash.h> 16#include <linux/siphash.h>
17#include <linux/kernel.h> 17#include <linux/kernel.h>
18#include <linux/export.h> 18#include <linux/export.h>
19#include <net/secure_seq.h>
19#include <net/tcp.h> 20#include <net/tcp.h>
20#include <net/route.h> 21#include <net/route.h>
21 22
@@ -203,7 +204,7 @@ EXPORT_SYMBOL_GPL(__cookie_v4_check);
203 204
204struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb, 205struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
205 struct request_sock *req, 206 struct request_sock *req,
206 struct dst_entry *dst) 207 struct dst_entry *dst, u32 tsoff)
207{ 208{
208 struct inet_connection_sock *icsk = inet_csk(sk); 209 struct inet_connection_sock *icsk = inet_csk(sk);
209 struct sock *child; 210 struct sock *child;
@@ -213,6 +214,7 @@ struct sock *tcp_get_cookie_sock(struct sock *sk, struct sk_buff *skb,
213 NULL, &own_req); 214 NULL, &own_req);
214 if (child) { 215 if (child) {
215 atomic_set(&req->rsk_refcnt, 1); 216 atomic_set(&req->rsk_refcnt, 1);
217 tcp_sk(child)->tsoffset = tsoff;
216 sock_rps_save_rxhash(child, skb); 218 sock_rps_save_rxhash(child, skb);
217 inet_csk_reqsk_queue_add(sk, req, child); 219 inet_csk_reqsk_queue_add(sk, req, child);
218 } else { 220 } else {
@@ -292,6 +294,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
292 struct rtable *rt; 294 struct rtable *rt;
293 __u8 rcv_wscale; 295 __u8 rcv_wscale;
294 struct flowi4 fl4; 296 struct flowi4 fl4;
297 u32 tsoff = 0;
295 298
296 if (!sock_net(sk)->ipv4.sysctl_tcp_syncookies || !th->ack || th->rst) 299 if (!sock_net(sk)->ipv4.sysctl_tcp_syncookies || !th->ack || th->rst)
297 goto out; 300 goto out;
@@ -311,6 +314,11 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
311 memset(&tcp_opt, 0, sizeof(tcp_opt)); 314 memset(&tcp_opt, 0, sizeof(tcp_opt));
312 tcp_parse_options(skb, &tcp_opt, 0, NULL); 315 tcp_parse_options(skb, &tcp_opt, 0, NULL);
313 316
317 if (tcp_opt.saw_tstamp && tcp_opt.rcv_tsecr) {
318 tsoff = secure_tcp_ts_off(ip_hdr(skb)->daddr, ip_hdr(skb)->saddr);
319 tcp_opt.rcv_tsecr -= tsoff;
320 }
321
314 if (!cookie_timestamp_decode(&tcp_opt)) 322 if (!cookie_timestamp_decode(&tcp_opt))
315 goto out; 323 goto out;
316 324
@@ -381,7 +389,7 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb)
381 ireq->rcv_wscale = rcv_wscale; 389 ireq->rcv_wscale = rcv_wscale;
382 ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), &rt->dst); 390 ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), &rt->dst);
383 391
384 ret = tcp_get_cookie_sock(sk, skb, req, &rt->dst); 392 ret = tcp_get_cookie_sock(sk, skb, req, &rt->dst, tsoff);
385 /* ip_queue_xmit() depends on our flow being setup 393 /* ip_queue_xmit() depends on our flow being setup
386 * Normal sockets get it right from inet_csk_route_child_sock() 394 * Normal sockets get it right from inet_csk_route_child_sock()
387 */ 395 */
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 9739962bfb3f..5a3ad09e2786 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -85,7 +85,6 @@ int sysctl_tcp_dsack __read_mostly = 1;
85int sysctl_tcp_app_win __read_mostly = 31; 85int sysctl_tcp_app_win __read_mostly = 31;
86int sysctl_tcp_adv_win_scale __read_mostly = 1; 86int sysctl_tcp_adv_win_scale __read_mostly = 1;
87EXPORT_SYMBOL(sysctl_tcp_adv_win_scale); 87EXPORT_SYMBOL(sysctl_tcp_adv_win_scale);
88EXPORT_SYMBOL(sysctl_tcp_timestamps);
89 88
90/* rfc5961 challenge ack rate limiting */ 89/* rfc5961 challenge ack rate limiting */
91int sysctl_tcp_challenge_ack_limit = 1000; 90int sysctl_tcp_challenge_ack_limit = 1000;
@@ -6347,8 +6346,8 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
6347 if (security_inet_conn_request(sk, skb, req)) 6346 if (security_inet_conn_request(sk, skb, req))
6348 goto drop_and_free; 6347 goto drop_and_free;
6349 6348
6350 if (isn && tmp_opt.tstamp_ok) 6349 if (tmp_opt.tstamp_ok)
6351 af_ops->init_seq_tsoff(skb, &tcp_rsk(req)->ts_off); 6350 tcp_rsk(req)->ts_off = af_ops->init_ts_off(skb);
6352 6351
6353 if (!want_cookie && !isn) { 6352 if (!want_cookie && !isn) {
6354 /* Kill the following clause, if you dislike this way. */ 6353 /* Kill the following clause, if you dislike this way. */
@@ -6368,7 +6367,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
6368 goto drop_and_release; 6367 goto drop_and_release;
6369 } 6368 }
6370 6369
6371 isn = af_ops->init_seq_tsoff(skb, &tcp_rsk(req)->ts_off); 6370 isn = af_ops->init_seq(skb);
6372 } 6371 }
6373 if (!dst) { 6372 if (!dst) {
6374 dst = af_ops->route_req(sk, &fl, req); 6373 dst = af_ops->route_req(sk, &fl, req);
@@ -6380,7 +6379,6 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
6380 6379
6381 if (want_cookie) { 6380 if (want_cookie) {
6382 isn = cookie_init_sequence(af_ops, sk, skb, &req->mss); 6381 isn = cookie_init_sequence(af_ops, sk, skb, &req->mss);
6383 tcp_rsk(req)->ts_off = 0;
6384 req->cookie_ts = tmp_opt.tstamp_ok; 6382 req->cookie_ts = tmp_opt.tstamp_ok;
6385 if (!tmp_opt.tstamp_ok) 6383 if (!tmp_opt.tstamp_ok)
6386 inet_rsk(req)->ecn_ok = 0; 6384 inet_rsk(req)->ecn_ok = 0;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index cbbafe546c0f..3a51582bef55 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -94,12 +94,18 @@ static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
94struct inet_hashinfo tcp_hashinfo; 94struct inet_hashinfo tcp_hashinfo;
95EXPORT_SYMBOL(tcp_hashinfo); 95EXPORT_SYMBOL(tcp_hashinfo);
96 96
97static u32 tcp_v4_init_seq_and_tsoff(const struct sk_buff *skb, u32 *tsoff) 97static u32 tcp_v4_init_seq(const struct sk_buff *skb)
98{ 98{
99 return secure_tcp_seq_and_tsoff(ip_hdr(skb)->daddr, 99 return secure_tcp_seq(ip_hdr(skb)->daddr,
100 ip_hdr(skb)->saddr, 100 ip_hdr(skb)->saddr,
101 tcp_hdr(skb)->dest, 101 tcp_hdr(skb)->dest,
102 tcp_hdr(skb)->source, tsoff); 102 tcp_hdr(skb)->source);
103}
104
105static u32 tcp_v4_init_ts_off(const struct sk_buff *skb)
106{
107 return secure_tcp_ts_off(ip_hdr(skb)->daddr,
108 ip_hdr(skb)->saddr);
103} 109}
104 110
105int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp) 111int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
@@ -145,7 +151,6 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
145 struct flowi4 *fl4; 151 struct flowi4 *fl4;
146 struct rtable *rt; 152 struct rtable *rt;
147 int err; 153 int err;
148 u32 seq;
149 struct ip_options_rcu *inet_opt; 154 struct ip_options_rcu *inet_opt;
150 struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row; 155 struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row;
151 156
@@ -232,13 +237,13 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
232 rt = NULL; 237 rt = NULL;
233 238
234 if (likely(!tp->repair)) { 239 if (likely(!tp->repair)) {
235 seq = secure_tcp_seq_and_tsoff(inet->inet_saddr,
236 inet->inet_daddr,
237 inet->inet_sport,
238 usin->sin_port,
239 &tp->tsoffset);
240 if (!tp->write_seq) 240 if (!tp->write_seq)
241 tp->write_seq = seq; 241 tp->write_seq = secure_tcp_seq(inet->inet_saddr,
242 inet->inet_daddr,
243 inet->inet_sport,
244 usin->sin_port);
245 tp->tsoffset = secure_tcp_ts_off(inet->inet_saddr,
246 inet->inet_daddr);
242 } 247 }
243 248
244 inet->inet_id = tp->write_seq ^ jiffies; 249 inet->inet_id = tp->write_seq ^ jiffies;
@@ -1239,7 +1244,8 @@ static const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops = {
1239 .cookie_init_seq = cookie_v4_init_sequence, 1244 .cookie_init_seq = cookie_v4_init_sequence,
1240#endif 1245#endif
1241 .route_req = tcp_v4_route_req, 1246 .route_req = tcp_v4_route_req,
1242 .init_seq_tsoff = tcp_v4_init_seq_and_tsoff, 1247 .init_seq = tcp_v4_init_seq,
1248 .init_ts_off = tcp_v4_init_ts_off,
1243 .send_synack = tcp_v4_send_synack, 1249 .send_synack = tcp_v4_send_synack,
1244}; 1250};
1245 1251
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 60111a0fc201..4858e190f6ac 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -1514,6 +1514,7 @@ static void tcp_cwnd_application_limited(struct sock *sk)
1514 1514
1515static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited) 1515static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)
1516{ 1516{
1517 const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
1517 struct tcp_sock *tp = tcp_sk(sk); 1518 struct tcp_sock *tp = tcp_sk(sk);
1518 1519
1519 /* Track the maximum number of outstanding packets in each 1520 /* Track the maximum number of outstanding packets in each
@@ -1536,7 +1537,8 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)
1536 tp->snd_cwnd_used = tp->packets_out; 1537 tp->snd_cwnd_used = tp->packets_out;
1537 1538
1538 if (sysctl_tcp_slow_start_after_idle && 1539 if (sysctl_tcp_slow_start_after_idle &&
1539 (s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto) 1540 (s32)(tcp_time_stamp - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto &&
1541 !ca_ops->cong_control)
1540 tcp_cwnd_application_limited(sk); 1542 tcp_cwnd_application_limited(sk);
1541 1543
1542 /* The following conditions together indicate the starvation 1544 /* The following conditions together indicate the starvation
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 77a4bd526d6e..8d297a79b568 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3548,6 +3548,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
3548 */ 3548 */
3549static struct notifier_block ipv6_dev_notf = { 3549static struct notifier_block ipv6_dev_notf = {
3550 .notifier_call = addrconf_notify, 3550 .notifier_call = addrconf_notify,
3551 .priority = ADDRCONF_NOTIFY_PRIORITY,
3551}; 3552};
3552 3553
3553static void addrconf_type_change(struct net_device *dev, unsigned long event) 3554static void addrconf_type_change(struct net_device *dev, unsigned long event)
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 2f1136627dcb..dc61b0b5e64e 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3709,7 +3709,10 @@ static int ip6_route_dev_notify(struct notifier_block *this,
3709 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 3709 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
3710 struct net *net = dev_net(dev); 3710 struct net *net = dev_net(dev);
3711 3711
3712 if (event == NETDEV_REGISTER && (dev->flags & IFF_LOOPBACK)) { 3712 if (!(dev->flags & IFF_LOOPBACK))
3713 return NOTIFY_OK;
3714
3715 if (event == NETDEV_REGISTER) {
3713 net->ipv6.ip6_null_entry->dst.dev = dev; 3716 net->ipv6.ip6_null_entry->dst.dev = dev;
3714 net->ipv6.ip6_null_entry->rt6i_idev = in6_dev_get(dev); 3717 net->ipv6.ip6_null_entry->rt6i_idev = in6_dev_get(dev);
3715#ifdef CONFIG_IPV6_MULTIPLE_TABLES 3718#ifdef CONFIG_IPV6_MULTIPLE_TABLES
@@ -3718,6 +3721,12 @@ static int ip6_route_dev_notify(struct notifier_block *this,
3718 net->ipv6.ip6_blk_hole_entry->dst.dev = dev; 3721 net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
3719 net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); 3722 net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
3720#endif 3723#endif
3724 } else if (event == NETDEV_UNREGISTER) {
3725 in6_dev_put(net->ipv6.ip6_null_entry->rt6i_idev);
3726#ifdef CONFIG_IPV6_MULTIPLE_TABLES
3727 in6_dev_put(net->ipv6.ip6_prohibit_entry->rt6i_idev);
3728 in6_dev_put(net->ipv6.ip6_blk_hole_entry->rt6i_idev);
3729#endif
3721 } 3730 }
3722 3731
3723 return NOTIFY_OK; 3732 return NOTIFY_OK;
@@ -4024,7 +4033,7 @@ static struct pernet_operations ip6_route_net_late_ops = {
4024 4033
4025static struct notifier_block ip6_route_dev_notifier = { 4034static struct notifier_block ip6_route_dev_notifier = {
4026 .notifier_call = ip6_route_dev_notify, 4035 .notifier_call = ip6_route_dev_notify,
4027 .priority = 0, 4036 .priority = ADDRCONF_NOTIFY_PRIORITY - 10,
4028}; 4037};
4029 4038
4030void __init ip6_route_init_special_entries(void) 4039void __init ip6_route_init_special_entries(void)
diff --git a/net/ipv6/syncookies.c b/net/ipv6/syncookies.c
index 895ff650db43..5abc3692b901 100644
--- a/net/ipv6/syncookies.c
+++ b/net/ipv6/syncookies.c
@@ -18,6 +18,7 @@
18#include <linux/random.h> 18#include <linux/random.h>
19#include <linux/siphash.h> 19#include <linux/siphash.h>
20#include <linux/kernel.h> 20#include <linux/kernel.h>
21#include <net/secure_seq.h>
21#include <net/ipv6.h> 22#include <net/ipv6.h>
22#include <net/tcp.h> 23#include <net/tcp.h>
23 24
@@ -143,6 +144,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
143 int mss; 144 int mss;
144 struct dst_entry *dst; 145 struct dst_entry *dst;
145 __u8 rcv_wscale; 146 __u8 rcv_wscale;
147 u32 tsoff = 0;
146 148
147 if (!sock_net(sk)->ipv4.sysctl_tcp_syncookies || !th->ack || th->rst) 149 if (!sock_net(sk)->ipv4.sysctl_tcp_syncookies || !th->ack || th->rst)
148 goto out; 150 goto out;
@@ -162,6 +164,12 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
162 memset(&tcp_opt, 0, sizeof(tcp_opt)); 164 memset(&tcp_opt, 0, sizeof(tcp_opt));
163 tcp_parse_options(skb, &tcp_opt, 0, NULL); 165 tcp_parse_options(skb, &tcp_opt, 0, NULL);
164 166
167 if (tcp_opt.saw_tstamp && tcp_opt.rcv_tsecr) {
168 tsoff = secure_tcpv6_ts_off(ipv6_hdr(skb)->daddr.s6_addr32,
169 ipv6_hdr(skb)->saddr.s6_addr32);
170 tcp_opt.rcv_tsecr -= tsoff;
171 }
172
165 if (!cookie_timestamp_decode(&tcp_opt)) 173 if (!cookie_timestamp_decode(&tcp_opt))
166 goto out; 174 goto out;
167 175
@@ -242,7 +250,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb)
242 ireq->rcv_wscale = rcv_wscale; 250 ireq->rcv_wscale = rcv_wscale;
243 ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), dst); 251 ireq->ecn_ok = cookie_ecn_ok(&tcp_opt, sock_net(sk), dst);
244 252
245 ret = tcp_get_cookie_sock(sk, skb, req, dst); 253 ret = tcp_get_cookie_sock(sk, skb, req, dst, tsoff);
246out: 254out:
247 return ret; 255 return ret;
248out_free: 256out_free:
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index 8e42e8f54b70..aeb9497b5bb7 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -101,12 +101,18 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
101 } 101 }
102} 102}
103 103
104static u32 tcp_v6_init_seq_and_tsoff(const struct sk_buff *skb, u32 *tsoff) 104static u32 tcp_v6_init_seq(const struct sk_buff *skb)
105{ 105{
106 return secure_tcpv6_seq_and_tsoff(ipv6_hdr(skb)->daddr.s6_addr32, 106 return secure_tcpv6_seq(ipv6_hdr(skb)->daddr.s6_addr32,
107 ipv6_hdr(skb)->saddr.s6_addr32, 107 ipv6_hdr(skb)->saddr.s6_addr32,
108 tcp_hdr(skb)->dest, 108 tcp_hdr(skb)->dest,
109 tcp_hdr(skb)->source, tsoff); 109 tcp_hdr(skb)->source);
110}
111
112static u32 tcp_v6_init_ts_off(const struct sk_buff *skb)
113{
114 return secure_tcpv6_ts_off(ipv6_hdr(skb)->daddr.s6_addr32,
115 ipv6_hdr(skb)->saddr.s6_addr32);
110} 116}
111 117
112static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, 118static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
@@ -122,7 +128,6 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
122 struct flowi6 fl6; 128 struct flowi6 fl6;
123 struct dst_entry *dst; 129 struct dst_entry *dst;
124 int addr_type; 130 int addr_type;
125 u32 seq;
126 int err; 131 int err;
127 struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row; 132 struct inet_timewait_death_row *tcp_death_row = &sock_net(sk)->ipv4.tcp_death_row;
128 133
@@ -282,13 +287,13 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
282 sk_set_txhash(sk); 287 sk_set_txhash(sk);
283 288
284 if (likely(!tp->repair)) { 289 if (likely(!tp->repair)) {
285 seq = secure_tcpv6_seq_and_tsoff(np->saddr.s6_addr32,
286 sk->sk_v6_daddr.s6_addr32,
287 inet->inet_sport,
288 inet->inet_dport,
289 &tp->tsoffset);
290 if (!tp->write_seq) 290 if (!tp->write_seq)
291 tp->write_seq = seq; 291 tp->write_seq = secure_tcpv6_seq(np->saddr.s6_addr32,
292 sk->sk_v6_daddr.s6_addr32,
293 inet->inet_sport,
294 inet->inet_dport);
295 tp->tsoffset = secure_tcpv6_ts_off(np->saddr.s6_addr32,
296 sk->sk_v6_daddr.s6_addr32);
292 } 297 }
293 298
294 if (tcp_fastopen_defer_connect(sk, &err)) 299 if (tcp_fastopen_defer_connect(sk, &err))
@@ -749,7 +754,8 @@ static const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
749 .cookie_init_seq = cookie_v6_init_sequence, 754 .cookie_init_seq = cookie_v6_init_sequence,
750#endif 755#endif
751 .route_req = tcp_v6_route_req, 756 .route_req = tcp_v6_route_req,
752 .init_seq_tsoff = tcp_v6_init_seq_and_tsoff, 757 .init_seq = tcp_v6_init_seq,
758 .init_ts_off = tcp_v6_init_ts_off,
753 .send_synack = tcp_v6_send_synack, 759 .send_synack = tcp_v6_send_synack,
754}; 760};
755 761
diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index 6db09fa18269..364d4e137649 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -66,6 +66,8 @@ ieee80211_ibss_build_presp(struct ieee80211_sub_if_data *sdata,
66 2 + (IEEE80211_MAX_SUPP_RATES - 8) + 66 2 + (IEEE80211_MAX_SUPP_RATES - 8) +
67 2 + sizeof(struct ieee80211_ht_cap) + 67 2 + sizeof(struct ieee80211_ht_cap) +
68 2 + sizeof(struct ieee80211_ht_operation) + 68 2 + sizeof(struct ieee80211_ht_operation) +
69 2 + sizeof(struct ieee80211_vht_cap) +
70 2 + sizeof(struct ieee80211_vht_operation) +
69 ifibss->ie_len; 71 ifibss->ie_len;
70 presp = kzalloc(sizeof(*presp) + frame_len, GFP_KERNEL); 72 presp = kzalloc(sizeof(*presp) + frame_len, GFP_KERNEL);
71 if (!presp) 73 if (!presp)
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 89dff563b1ec..0ea9712bd99e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -4382,6 +4382,10 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
4382 if (WARN_ON(!ifmgd->auth_data && !ifmgd->assoc_data)) 4382 if (WARN_ON(!ifmgd->auth_data && !ifmgd->assoc_data))
4383 return -EINVAL; 4383 return -EINVAL;
4384 4384
4385 /* If a reconfig is happening, bail out */
4386 if (local->in_reconfig)
4387 return -EBUSY;
4388
4385 if (assoc) { 4389 if (assoc) {
4386 rcu_read_lock(); 4390 rcu_read_lock();
4387 have_sta = sta_info_get(sdata, cbss->bssid); 4391 have_sta = sta_info_get(sdata, cbss->bssid);
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 570fc95dc507..c3bc9da30cff 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -2764,8 +2764,8 @@ static int nl80211_parse_mon_options(struct cfg80211_registered_device *rdev,
2764 nla_data(info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]); 2764 nla_data(info->attrs[NL80211_ATTR_MU_MIMO_GROUP_DATA]);
2765 2765
2766 /* bits 0 and 63 are reserved and must be zero */ 2766 /* bits 0 and 63 are reserved and must be zero */
2767 if ((mumimo_groups[0] & BIT(7)) || 2767 if ((mumimo_groups[0] & BIT(0)) ||
2768 (mumimo_groups[VHT_MUMIMO_GROUPS_DATA_LEN - 1] & BIT(0))) 2768 (mumimo_groups[VHT_MUMIMO_GROUPS_DATA_LEN - 1] & BIT(7)))
2769 return -EINVAL; 2769 return -EINVAL;
2770 2770
2771 params->vht_mumimo_groups = mumimo_groups; 2771 params->vht_mumimo_groups = mumimo_groups;