aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/net/dsa/b53.txt1
-rw-r--r--drivers/atm/zatm.c4
-rw-r--r--drivers/net/dsa/b53/b53_common.c13
-rw-r--r--drivers/net/dsa/b53/b53_mdio.c5
-rw-r--r--drivers/net/dsa/b53/b53_priv.h1
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c9
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum.c5
-rw-r--r--drivers/net/ethernet/natsemi/sonic.c2
-rw-r--r--drivers/net/ethernet/socionext/netsec.c4
-rw-r--r--drivers/net/ethernet/ti/davinci_emac.c22
-rw-r--r--drivers/net/tun.c15
-rw-r--r--drivers/net/usb/cdc_mbim.c2
-rw-r--r--drivers/net/usb/qmi_wwan.c1
-rw-r--r--drivers/net/wireless/intel/iwlwifi/pcie/trans.c10
-rw-r--r--drivers/net/wireless/ralink/rt2x00/rt2x00queue.c7
-rw-r--r--drivers/vhost/net.c37
-rw-r--r--include/uapi/linux/bpf.h2
-rw-r--r--net/bridge/netfilter/ebtables.c3
-rw-r--r--net/core/net-sysfs.c6
-rw-r--r--net/ipv4/ip_tunnel.c8
-rw-r--r--net/ipv6/ip6_tunnel.c11
-rw-r--r--net/ipv6/seg6_iptunnel.c4
-rw-r--r--net/ipv6/sit.c5
-rw-r--r--net/ipv6/xfrm6_policy.c2
-rw-r--r--net/kcm/kcmsock.c2
-rw-r--r--net/ncsi/ncsi-netlink.c2
-rw-r--r--net/netfilter/ipvs/ip_vs_ctl.c21
-rw-r--r--net/netfilter/nf_tables_api.c8
-rw-r--r--net/netfilter/nf_tables_core.c4
-rw-r--r--net/netfilter/nfnetlink_acct.c2
-rw-r--r--net/netfilter/nfnetlink_cthelper.c4
-rw-r--r--net/netfilter/nft_ct.c20
-rw-r--r--net/netfilter/nft_limit.c38
-rw-r--r--net/netfilter/nft_meta.c14
-rw-r--r--net/sched/cls_flower.c2
-rw-r--r--net/xfrm/xfrm_policy.c5
-rw-r--r--tools/include/uapi/linux/bpf.h2
38 files changed, 192 insertions, 115 deletions
diff --git a/Documentation/devicetree/bindings/net/dsa/b53.txt b/Documentation/devicetree/bindings/net/dsa/b53.txt
index 8acf51a4dfa8..47a6a7fe0b86 100644
--- a/Documentation/devicetree/bindings/net/dsa/b53.txt
+++ b/Documentation/devicetree/bindings/net/dsa/b53.txt
@@ -10,6 +10,7 @@ Required properties:
10 "brcm,bcm53128" 10 "brcm,bcm53128"
11 "brcm,bcm5365" 11 "brcm,bcm5365"
12 "brcm,bcm5395" 12 "brcm,bcm5395"
13 "brcm,bcm5389"
13 "brcm,bcm5397" 14 "brcm,bcm5397"
14 "brcm,bcm5398" 15 "brcm,bcm5398"
15 16
diff --git a/drivers/atm/zatm.c b/drivers/atm/zatm.c
index 9c9a22958717..a8d2eb0ceb8d 100644
--- a/drivers/atm/zatm.c
+++ b/drivers/atm/zatm.c
@@ -1151,8 +1151,8 @@ static void eprom_get_byte(struct zatm_dev *zatm_dev, unsigned char *byte,
1151} 1151}
1152 1152
1153 1153
1154static unsigned char eprom_try_esi(struct atm_dev *dev, unsigned short cmd, 1154static int eprom_try_esi(struct atm_dev *dev, unsigned short cmd, int offset,
1155 int offset, int swap) 1155 int swap)
1156{ 1156{
1157 unsigned char buf[ZEPROM_SIZE]; 1157 unsigned char buf[ZEPROM_SIZE];
1158 struct zatm_dev *zatm_dev; 1158 struct zatm_dev *zatm_dev;
diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c
index 78616787f2a3..3da5fca77cbd 100644
--- a/drivers/net/dsa/b53/b53_common.c
+++ b/drivers/net/dsa/b53/b53_common.c
@@ -1712,6 +1712,18 @@ static const struct b53_chip_data b53_switch_chips[] = {
1712 .duplex_reg = B53_DUPLEX_STAT_FE, 1712 .duplex_reg = B53_DUPLEX_STAT_FE,
1713 }, 1713 },
1714 { 1714 {
1715 .chip_id = BCM5389_DEVICE_ID,
1716 .dev_name = "BCM5389",
1717 .vlans = 4096,
1718 .enabled_ports = 0x1f,
1719 .arl_entries = 4,
1720 .cpu_port = B53_CPU_PORT,
1721 .vta_regs = B53_VTA_REGS,
1722 .duplex_reg = B53_DUPLEX_STAT_GE,
1723 .jumbo_pm_reg = B53_JUMBO_PORT_MASK,
1724 .jumbo_size_reg = B53_JUMBO_MAX_SIZE,
1725 },
1726 {
1715 .chip_id = BCM5395_DEVICE_ID, 1727 .chip_id = BCM5395_DEVICE_ID,
1716 .dev_name = "BCM5395", 1728 .dev_name = "BCM5395",
1717 .vlans = 4096, 1729 .vlans = 4096,
@@ -2034,6 +2046,7 @@ int b53_switch_detect(struct b53_device *dev)
2034 else 2046 else
2035 dev->chip_id = BCM5365_DEVICE_ID; 2047 dev->chip_id = BCM5365_DEVICE_ID;
2036 break; 2048 break;
2049 case BCM5389_DEVICE_ID:
2037 case BCM5395_DEVICE_ID: 2050 case BCM5395_DEVICE_ID:
2038 case BCM5397_DEVICE_ID: 2051 case BCM5397_DEVICE_ID:
2039 case BCM5398_DEVICE_ID: 2052 case BCM5398_DEVICE_ID:
diff --git a/drivers/net/dsa/b53/b53_mdio.c b/drivers/net/dsa/b53/b53_mdio.c
index fa7556f5d4fb..a533a90e3904 100644
--- a/drivers/net/dsa/b53/b53_mdio.c
+++ b/drivers/net/dsa/b53/b53_mdio.c
@@ -285,6 +285,7 @@ static const struct b53_io_ops b53_mdio_ops = {
285#define B53_BRCM_OUI_1 0x0143bc00 285#define B53_BRCM_OUI_1 0x0143bc00
286#define B53_BRCM_OUI_2 0x03625c00 286#define B53_BRCM_OUI_2 0x03625c00
287#define B53_BRCM_OUI_3 0x00406000 287#define B53_BRCM_OUI_3 0x00406000
288#define B53_BRCM_OUI_4 0x01410c00
288 289
289static int b53_mdio_probe(struct mdio_device *mdiodev) 290static int b53_mdio_probe(struct mdio_device *mdiodev)
290{ 291{
@@ -311,7 +312,8 @@ static int b53_mdio_probe(struct mdio_device *mdiodev)
311 */ 312 */
312 if ((phy_id & 0xfffffc00) != B53_BRCM_OUI_1 && 313 if ((phy_id & 0xfffffc00) != B53_BRCM_OUI_1 &&
313 (phy_id & 0xfffffc00) != B53_BRCM_OUI_2 && 314 (phy_id & 0xfffffc00) != B53_BRCM_OUI_2 &&
314 (phy_id & 0xfffffc00) != B53_BRCM_OUI_3) { 315 (phy_id & 0xfffffc00) != B53_BRCM_OUI_3 &&
316 (phy_id & 0xfffffc00) != B53_BRCM_OUI_4) {
315 dev_err(&mdiodev->dev, "Unsupported device: 0x%08x\n", phy_id); 317 dev_err(&mdiodev->dev, "Unsupported device: 0x%08x\n", phy_id);
316 return -ENODEV; 318 return -ENODEV;
317 } 319 }
@@ -360,6 +362,7 @@ static const struct of_device_id b53_of_match[] = {
360 { .compatible = "brcm,bcm53125" }, 362 { .compatible = "brcm,bcm53125" },
361 { .compatible = "brcm,bcm53128" }, 363 { .compatible = "brcm,bcm53128" },
362 { .compatible = "brcm,bcm5365" }, 364 { .compatible = "brcm,bcm5365" },
365 { .compatible = "brcm,bcm5389" },
363 { .compatible = "brcm,bcm5395" }, 366 { .compatible = "brcm,bcm5395" },
364 { .compatible = "brcm,bcm5397" }, 367 { .compatible = "brcm,bcm5397" },
365 { .compatible = "brcm,bcm5398" }, 368 { .compatible = "brcm,bcm5398" },
diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h
index 1187ebd79287..3b57f47d0e79 100644
--- a/drivers/net/dsa/b53/b53_priv.h
+++ b/drivers/net/dsa/b53/b53_priv.h
@@ -48,6 +48,7 @@ struct b53_io_ops {
48enum { 48enum {
49 BCM5325_DEVICE_ID = 0x25, 49 BCM5325_DEVICE_ID = 0x25,
50 BCM5365_DEVICE_ID = 0x65, 50 BCM5365_DEVICE_ID = 0x65,
51 BCM5389_DEVICE_ID = 0x89,
51 BCM5395_DEVICE_ID = 0x95, 52 BCM5395_DEVICE_ID = 0x95,
52 BCM5397_DEVICE_ID = 0x97, 53 BCM5397_DEVICE_ID = 0x97,
53 BCM5398_DEVICE_ID = 0x98, 54 BCM5398_DEVICE_ID = 0x98,
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index c697e79e491e..8f755009ff38 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -3309,7 +3309,9 @@ void be_detect_error(struct be_adapter *adapter)
3309 if ((val & POST_STAGE_FAT_LOG_START) 3309 if ((val & POST_STAGE_FAT_LOG_START)
3310 != POST_STAGE_FAT_LOG_START && 3310 != POST_STAGE_FAT_LOG_START &&
3311 (val & POST_STAGE_ARMFW_UE) 3311 (val & POST_STAGE_ARMFW_UE)
3312 != POST_STAGE_ARMFW_UE) 3312 != POST_STAGE_ARMFW_UE &&
3313 (val & POST_STAGE_RECOVERABLE_ERR)
3314 != POST_STAGE_RECOVERABLE_ERR)
3313 return; 3315 return;
3314 } 3316 }
3315 3317
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index afadba99f7b8..2ecd55856c50 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -9054,7 +9054,6 @@ static int parse_tc_actions(struct ixgbe_adapter *adapter,
9054{ 9054{
9055 const struct tc_action *a; 9055 const struct tc_action *a;
9056 LIST_HEAD(actions); 9056 LIST_HEAD(actions);
9057 int err;
9058 9057
9059 if (!tcf_exts_has_actions(exts)) 9058 if (!tcf_exts_has_actions(exts))
9060 return -EINVAL; 9059 return -EINVAL;
@@ -9075,11 +9074,11 @@ static int parse_tc_actions(struct ixgbe_adapter *adapter,
9075 9074
9076 if (!dev) 9075 if (!dev)
9077 return -EINVAL; 9076 return -EINVAL;
9078 err = handle_redirect_action(adapter, dev->ifindex, queue, 9077 return handle_redirect_action(adapter, dev->ifindex,
9079 action); 9078 queue, action);
9080 if (err == 0)
9081 return err;
9082 } 9079 }
9080
9081 return -EINVAL;
9083 } 9082 }
9084 9083
9085 return -EINVAL; 9084 return -EINVAL;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index ca38a30fbe91..adc6ab2cf429 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -4433,6 +4433,11 @@ static int mlxsw_sp_netdevice_port_upper_event(struct net_device *lower_dev,
4433 NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on an OVS port"); 4433 NL_SET_ERR_MSG_MOD(extack, "Can not put a VLAN on an OVS port");
4434 return -EINVAL; 4434 return -EINVAL;
4435 } 4435 }
4436 if (is_vlan_dev(upper_dev) &&
4437 vlan_dev_vlan_id(upper_dev) == 1) {
4438 NL_SET_ERR_MSG_MOD(extack, "Creating a VLAN device with VID 1 is unsupported: VLAN 1 carries untagged traffic");
4439 return -EINVAL;
4440 }
4436 break; 4441 break;
4437 case NETDEV_CHANGEUPPER: 4442 case NETDEV_CHANGEUPPER:
4438 upper_dev = info->upper_dev; 4443 upper_dev = info->upper_dev;
diff --git a/drivers/net/ethernet/natsemi/sonic.c b/drivers/net/ethernet/natsemi/sonic.c
index 7ed08486ae23..c805dcbebd02 100644
--- a/drivers/net/ethernet/natsemi/sonic.c
+++ b/drivers/net/ethernet/natsemi/sonic.c
@@ -84,7 +84,7 @@ static int sonic_open(struct net_device *dev)
84 for (i = 0; i < SONIC_NUM_RRS; i++) { 84 for (i = 0; i < SONIC_NUM_RRS; i++) {
85 dma_addr_t laddr = dma_map_single(lp->device, skb_put(lp->rx_skb[i], SONIC_RBSIZE), 85 dma_addr_t laddr = dma_map_single(lp->device, skb_put(lp->rx_skb[i], SONIC_RBSIZE),
86 SONIC_RBSIZE, DMA_FROM_DEVICE); 86 SONIC_RBSIZE, DMA_FROM_DEVICE);
87 if (!laddr) { 87 if (dma_mapping_error(lp->device, laddr)) {
88 while(i > 0) { /* free any that were mapped successfully */ 88 while(i > 0) { /* free any that were mapped successfully */
89 i--; 89 i--;
90 dma_unmap_single(lp->device, lp->rx_laddr[i], SONIC_RBSIZE, DMA_FROM_DEVICE); 90 dma_unmap_single(lp->device, lp->rx_laddr[i], SONIC_RBSIZE, DMA_FROM_DEVICE);
diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
index f4c0b02ddad8..59fbf74dcada 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -1674,8 +1674,8 @@ static int netsec_probe(struct platform_device *pdev)
1674 if (ret) 1674 if (ret)
1675 goto unreg_napi; 1675 goto unreg_napi;
1676 1676
1677 if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) 1677 if (dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)))
1678 dev_warn(&pdev->dev, "Failed to enable 64-bit DMA\n"); 1678 dev_warn(&pdev->dev, "Failed to set DMA mask\n");
1679 1679
1680 ret = register_netdev(ndev); 1680 ret = register_netdev(ndev);
1681 if (ret) { 1681 if (ret) {
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
index abceea802ea1..38828ab77eb9 100644
--- a/drivers/net/ethernet/ti/davinci_emac.c
+++ b/drivers/net/ethernet/ti/davinci_emac.c
@@ -1873,7 +1873,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
1873 if (IS_ERR(priv->txchan)) { 1873 if (IS_ERR(priv->txchan)) {
1874 dev_err(&pdev->dev, "error initializing tx dma channel\n"); 1874 dev_err(&pdev->dev, "error initializing tx dma channel\n");
1875 rc = PTR_ERR(priv->txchan); 1875 rc = PTR_ERR(priv->txchan);
1876 goto no_cpdma_chan; 1876 goto err_free_dma;
1877 } 1877 }
1878 1878
1879 priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH, 1879 priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
@@ -1881,14 +1881,14 @@ static int davinci_emac_probe(struct platform_device *pdev)
1881 if (IS_ERR(priv->rxchan)) { 1881 if (IS_ERR(priv->rxchan)) {
1882 dev_err(&pdev->dev, "error initializing rx dma channel\n"); 1882 dev_err(&pdev->dev, "error initializing rx dma channel\n");
1883 rc = PTR_ERR(priv->rxchan); 1883 rc = PTR_ERR(priv->rxchan);
1884 goto no_cpdma_chan; 1884 goto err_free_txchan;
1885 } 1885 }
1886 1886
1887 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1887 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1888 if (!res) { 1888 if (!res) {
1889 dev_err(&pdev->dev, "error getting irq res\n"); 1889 dev_err(&pdev->dev, "error getting irq res\n");
1890 rc = -ENOENT; 1890 rc = -ENOENT;
1891 goto no_cpdma_chan; 1891 goto err_free_rxchan;
1892 } 1892 }
1893 ndev->irq = res->start; 1893 ndev->irq = res->start;
1894 1894
@@ -1914,7 +1914,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
1914 pm_runtime_put_noidle(&pdev->dev); 1914 pm_runtime_put_noidle(&pdev->dev);
1915 dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n", 1915 dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1916 __func__, rc); 1916 __func__, rc);
1917 goto no_cpdma_chan; 1917 goto err_napi_del;
1918 } 1918 }
1919 1919
1920 /* register the network device */ 1920 /* register the network device */
@@ -1924,7 +1924,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
1924 dev_err(&pdev->dev, "error in register_netdev\n"); 1924 dev_err(&pdev->dev, "error in register_netdev\n");
1925 rc = -ENODEV; 1925 rc = -ENODEV;
1926 pm_runtime_put(&pdev->dev); 1926 pm_runtime_put(&pdev->dev);
1927 goto no_cpdma_chan; 1927 goto err_napi_del;
1928 } 1928 }
1929 1929
1930 1930
@@ -1937,11 +1937,13 @@ static int davinci_emac_probe(struct platform_device *pdev)
1937 1937
1938 return 0; 1938 return 0;
1939 1939
1940no_cpdma_chan: 1940err_napi_del:
1941 if (priv->txchan) 1941 netif_napi_del(&priv->napi);
1942 cpdma_chan_destroy(priv->txchan); 1942err_free_rxchan:
1943 if (priv->rxchan) 1943 cpdma_chan_destroy(priv->rxchan);
1944 cpdma_chan_destroy(priv->rxchan); 1944err_free_txchan:
1945 cpdma_chan_destroy(priv->txchan);
1946err_free_dma:
1945 cpdma_ctlr_destroy(priv->dma); 1947 cpdma_ctlr_destroy(priv->dma);
1946no_pdata: 1948no_pdata:
1947 if (of_phy_is_fixed_link(np)) 1949 if (of_phy_is_fixed_link(np))
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 45d807796a18..23e9eb66197f 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1650,7 +1650,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
1650 else 1650 else
1651 *skb_xdp = 0; 1651 *skb_xdp = 0;
1652 1652
1653 preempt_disable(); 1653 local_bh_disable();
1654 rcu_read_lock(); 1654 rcu_read_lock();
1655 xdp_prog = rcu_dereference(tun->xdp_prog); 1655 xdp_prog = rcu_dereference(tun->xdp_prog);
1656 if (xdp_prog && !*skb_xdp) { 1656 if (xdp_prog && !*skb_xdp) {
@@ -1675,7 +1675,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
1675 if (err) 1675 if (err)
1676 goto err_redirect; 1676 goto err_redirect;
1677 rcu_read_unlock(); 1677 rcu_read_unlock();
1678 preempt_enable(); 1678 local_bh_enable();
1679 return NULL; 1679 return NULL;
1680 case XDP_TX: 1680 case XDP_TX:
1681 get_page(alloc_frag->page); 1681 get_page(alloc_frag->page);
@@ -1684,7 +1684,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
1684 goto err_redirect; 1684 goto err_redirect;
1685 tun_xdp_flush(tun->dev); 1685 tun_xdp_flush(tun->dev);
1686 rcu_read_unlock(); 1686 rcu_read_unlock();
1687 preempt_enable(); 1687 local_bh_enable();
1688 return NULL; 1688 return NULL;
1689 case XDP_PASS: 1689 case XDP_PASS:
1690 delta = orig_data - xdp.data; 1690 delta = orig_data - xdp.data;
@@ -1703,7 +1703,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
1703 skb = build_skb(buf, buflen); 1703 skb = build_skb(buf, buflen);
1704 if (!skb) { 1704 if (!skb) {
1705 rcu_read_unlock(); 1705 rcu_read_unlock();
1706 preempt_enable(); 1706 local_bh_enable();
1707 return ERR_PTR(-ENOMEM); 1707 return ERR_PTR(-ENOMEM);
1708 } 1708 }
1709 1709
@@ -1713,7 +1713,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun,
1713 alloc_frag->offset += buflen; 1713 alloc_frag->offset += buflen;
1714 1714
1715 rcu_read_unlock(); 1715 rcu_read_unlock();
1716 preempt_enable(); 1716 local_bh_enable();
1717 1717
1718 return skb; 1718 return skb;
1719 1719
@@ -1721,7 +1721,7 @@ err_redirect:
1721 put_page(alloc_frag->page); 1721 put_page(alloc_frag->page);
1722err_xdp: 1722err_xdp:
1723 rcu_read_unlock(); 1723 rcu_read_unlock();
1724 preempt_enable(); 1724 local_bh_enable();
1725 this_cpu_inc(tun->pcpu_stats->rx_dropped); 1725 this_cpu_inc(tun->pcpu_stats->rx_dropped);
1726 return NULL; 1726 return NULL;
1727} 1727}
@@ -1917,16 +1917,19 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
1917 struct bpf_prog *xdp_prog; 1917 struct bpf_prog *xdp_prog;
1918 int ret; 1918 int ret;
1919 1919
1920 local_bh_disable();
1920 rcu_read_lock(); 1921 rcu_read_lock();
1921 xdp_prog = rcu_dereference(tun->xdp_prog); 1922 xdp_prog = rcu_dereference(tun->xdp_prog);
1922 if (xdp_prog) { 1923 if (xdp_prog) {
1923 ret = do_xdp_generic(xdp_prog, skb); 1924 ret = do_xdp_generic(xdp_prog, skb);
1924 if (ret != XDP_PASS) { 1925 if (ret != XDP_PASS) {
1925 rcu_read_unlock(); 1926 rcu_read_unlock();
1927 local_bh_enable();
1926 return total_len; 1928 return total_len;
1927 } 1929 }
1928 } 1930 }
1929 rcu_read_unlock(); 1931 rcu_read_unlock();
1932 local_bh_enable();
1930 } 1933 }
1931 1934
1932 rcu_read_lock(); 1935 rcu_read_lock();
diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
index 7220cd620717..0362acd5cdca 100644
--- a/drivers/net/usb/cdc_mbim.c
+++ b/drivers/net/usb/cdc_mbim.c
@@ -609,7 +609,7 @@ static const struct driver_info cdc_mbim_info_ndp_to_end = {
609 */ 609 */
610static const struct driver_info cdc_mbim_info_avoid_altsetting_toggle = { 610static const struct driver_info cdc_mbim_info_avoid_altsetting_toggle = {
611 .description = "CDC MBIM", 611 .description = "CDC MBIM",
612 .flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET | FLAG_WWAN, 612 .flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET | FLAG_WWAN | FLAG_SEND_ZLP,
613 .bind = cdc_mbim_bind, 613 .bind = cdc_mbim_bind,
614 .unbind = cdc_mbim_unbind, 614 .unbind = cdc_mbim_unbind,
615 .manage_power = cdc_mbim_manage_power, 615 .manage_power = cdc_mbim_manage_power,
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
index 42565dd33aa6..094680871687 100644
--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -1103,6 +1103,7 @@ static const struct usb_device_id products[] = {
1103 {QMI_FIXED_INTF(0x05c6, 0x920d, 5)}, 1103 {QMI_FIXED_INTF(0x05c6, 0x920d, 5)},
1104 {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */ 1104 {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */
1105 {QMI_FIXED_INTF(0x0846, 0x68a2, 8)}, 1105 {QMI_FIXED_INTF(0x0846, 0x68a2, 8)},
1106 {QMI_FIXED_INTF(0x0846, 0x68d3, 8)}, /* Netgear Aircard 779S */
1106 {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */ 1107 {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
1107 {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */ 1108 {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */
1108 {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */ 1109 {QMI_FIXED_INTF(0x1435, 0xd181, 3)}, /* Wistron NeWeb D18Q1 */
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
index f8a0234d332c..5517ea4c2aa0 100644
--- a/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans.c
@@ -1590,14 +1590,13 @@ static void iwl_pcie_set_interrupt_capa(struct pci_dev *pdev,
1590 struct iwl_trans *trans) 1590 struct iwl_trans *trans)
1591{ 1591{
1592 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 1592 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
1593 int max_irqs, num_irqs, i, ret, nr_online_cpus; 1593 int max_irqs, num_irqs, i, ret;
1594 u16 pci_cmd; 1594 u16 pci_cmd;
1595 1595
1596 if (!trans->cfg->mq_rx_supported) 1596 if (!trans->cfg->mq_rx_supported)
1597 goto enable_msi; 1597 goto enable_msi;
1598 1598
1599 nr_online_cpus = num_online_cpus(); 1599 max_irqs = min_t(u32, num_online_cpus() + 2, IWL_MAX_RX_HW_QUEUES);
1600 max_irqs = min_t(u32, nr_online_cpus + 2, IWL_MAX_RX_HW_QUEUES);
1601 for (i = 0; i < max_irqs; i++) 1600 for (i = 0; i < max_irqs; i++)
1602 trans_pcie->msix_entries[i].entry = i; 1601 trans_pcie->msix_entries[i].entry = i;
1603 1602
@@ -1623,16 +1622,17 @@ static void iwl_pcie_set_interrupt_capa(struct pci_dev *pdev,
1623 * Two interrupts less: non rx causes shared with FBQ and RSS. 1622 * Two interrupts less: non rx causes shared with FBQ and RSS.
1624 * More than two interrupts: we will use fewer RSS queues. 1623 * More than two interrupts: we will use fewer RSS queues.
1625 */ 1624 */
1626 if (num_irqs <= nr_online_cpus) { 1625 if (num_irqs <= max_irqs - 2) {
1627 trans_pcie->trans->num_rx_queues = num_irqs + 1; 1626 trans_pcie->trans->num_rx_queues = num_irqs + 1;
1628 trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX | 1627 trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX |
1629 IWL_SHARED_IRQ_FIRST_RSS; 1628 IWL_SHARED_IRQ_FIRST_RSS;
1630 } else if (num_irqs == nr_online_cpus + 1) { 1629 } else if (num_irqs == max_irqs - 1) {
1631 trans_pcie->trans->num_rx_queues = num_irqs; 1630 trans_pcie->trans->num_rx_queues = num_irqs;
1632 trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX; 1631 trans_pcie->shared_vec_mask = IWL_SHARED_IRQ_NON_RX;
1633 } else { 1632 } else {
1634 trans_pcie->trans->num_rx_queues = num_irqs - 1; 1633 trans_pcie->trans->num_rx_queues = num_irqs - 1;
1635 } 1634 }
1635 WARN_ON(trans_pcie->trans->num_rx_queues > IWL_MAX_RX_HW_QUEUES);
1636 1636
1637 trans_pcie->alloc_vecs = num_irqs; 1637 trans_pcie->alloc_vecs = num_irqs;
1638 trans_pcie->msix_enabled = true; 1638 trans_pcie->msix_enabled = true;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
index a6884e73d2ab..7ddee980048b 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
@@ -372,16 +372,15 @@ static void rt2x00queue_create_tx_descriptor_ht(struct rt2x00_dev *rt2x00dev,
372 372
373 /* 373 /*
374 * Determine IFS values 374 * Determine IFS values
375 * - Use TXOP_BACKOFF for probe and management frames except beacons 375 * - Use TXOP_BACKOFF for management frames except beacons
376 * - Use TXOP_SIFS for fragment bursts 376 * - Use TXOP_SIFS for fragment bursts
377 * - Use TXOP_HTTXOP for everything else 377 * - Use TXOP_HTTXOP for everything else
378 * 378 *
379 * Note: rt2800 devices won't use CTS protection (if used) 379 * Note: rt2800 devices won't use CTS protection (if used)
380 * for frames not transmitted with TXOP_HTTXOP 380 * for frames not transmitted with TXOP_HTTXOP
381 */ 381 */
382 if ((ieee80211_is_mgmt(hdr->frame_control) && 382 if (ieee80211_is_mgmt(hdr->frame_control) &&
383 !ieee80211_is_beacon(hdr->frame_control)) || 383 !ieee80211_is_beacon(hdr->frame_control))
384 (tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE))
385 txdesc->u.ht.txop = TXOP_BACKOFF; 384 txdesc->u.ht.txop = TXOP_BACKOFF;
386 else if (!(tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT)) 385 else if (!(tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT))
387 txdesc->u.ht.txop = TXOP_SIFS; 386 txdesc->u.ht.txop = TXOP_SIFS;
diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
index 986058a57917..eeaf6739215f 100644
--- a/drivers/vhost/net.c
+++ b/drivers/vhost/net.c
@@ -105,7 +105,9 @@ struct vhost_net_virtqueue {
105 /* vhost zerocopy support fields below: */ 105 /* vhost zerocopy support fields below: */
106 /* last used idx for outstanding DMA zerocopy buffers */ 106 /* last used idx for outstanding DMA zerocopy buffers */
107 int upend_idx; 107 int upend_idx;
108 /* first used idx for DMA done zerocopy buffers */ 108 /* For TX, first used idx for DMA done zerocopy buffers
109 * For RX, number of batched heads
110 */
109 int done_idx; 111 int done_idx;
110 /* an array of userspace buffers info */ 112 /* an array of userspace buffers info */
111 struct ubuf_info *ubuf_info; 113 struct ubuf_info *ubuf_info;
@@ -626,6 +628,18 @@ static int sk_has_rx_data(struct sock *sk)
626 return skb_queue_empty(&sk->sk_receive_queue); 628 return skb_queue_empty(&sk->sk_receive_queue);
627} 629}
628 630
631static void vhost_rx_signal_used(struct vhost_net_virtqueue *nvq)
632{
633 struct vhost_virtqueue *vq = &nvq->vq;
634 struct vhost_dev *dev = vq->dev;
635
636 if (!nvq->done_idx)
637 return;
638
639 vhost_add_used_and_signal_n(dev, vq, vq->heads, nvq->done_idx);
640 nvq->done_idx = 0;
641}
642
629static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk) 643static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk)
630{ 644{
631 struct vhost_net_virtqueue *rvq = &net->vqs[VHOST_NET_VQ_RX]; 645 struct vhost_net_virtqueue *rvq = &net->vqs[VHOST_NET_VQ_RX];
@@ -635,6 +649,8 @@ static int vhost_net_rx_peek_head_len(struct vhost_net *net, struct sock *sk)
635 int len = peek_head_len(rvq, sk); 649 int len = peek_head_len(rvq, sk);
636 650
637 if (!len && vq->busyloop_timeout) { 651 if (!len && vq->busyloop_timeout) {
652 /* Flush batched heads first */
653 vhost_rx_signal_used(rvq);
638 /* Both tx vq and rx socket were polled here */ 654 /* Both tx vq and rx socket were polled here */
639 mutex_lock_nested(&vq->mutex, 1); 655 mutex_lock_nested(&vq->mutex, 1);
640 vhost_disable_notify(&net->dev, vq); 656 vhost_disable_notify(&net->dev, vq);
@@ -762,7 +778,7 @@ static void handle_rx(struct vhost_net *net)
762 }; 778 };
763 size_t total_len = 0; 779 size_t total_len = 0;
764 int err, mergeable; 780 int err, mergeable;
765 s16 headcount, nheads = 0; 781 s16 headcount;
766 size_t vhost_hlen, sock_hlen; 782 size_t vhost_hlen, sock_hlen;
767 size_t vhost_len, sock_len; 783 size_t vhost_len, sock_len;
768 struct socket *sock; 784 struct socket *sock;
@@ -790,8 +806,8 @@ static void handle_rx(struct vhost_net *net)
790 while ((sock_len = vhost_net_rx_peek_head_len(net, sock->sk))) { 806 while ((sock_len = vhost_net_rx_peek_head_len(net, sock->sk))) {
791 sock_len += sock_hlen; 807 sock_len += sock_hlen;
792 vhost_len = sock_len + vhost_hlen; 808 vhost_len = sock_len + vhost_hlen;
793 headcount = get_rx_bufs(vq, vq->heads + nheads, vhost_len, 809 headcount = get_rx_bufs(vq, vq->heads + nvq->done_idx,
794 &in, vq_log, &log, 810 vhost_len, &in, vq_log, &log,
795 likely(mergeable) ? UIO_MAXIOV : 1); 811 likely(mergeable) ? UIO_MAXIOV : 1);
796 /* On error, stop handling until the next kick. */ 812 /* On error, stop handling until the next kick. */
797 if (unlikely(headcount < 0)) 813 if (unlikely(headcount < 0))
@@ -862,12 +878,9 @@ static void handle_rx(struct vhost_net *net)
862 vhost_discard_vq_desc(vq, headcount); 878 vhost_discard_vq_desc(vq, headcount);
863 goto out; 879 goto out;
864 } 880 }
865 nheads += headcount; 881 nvq->done_idx += headcount;
866 if (nheads > VHOST_RX_BATCH) { 882 if (nvq->done_idx > VHOST_RX_BATCH)
867 vhost_add_used_and_signal_n(&net->dev, vq, vq->heads, 883 vhost_rx_signal_used(nvq);
868 nheads);
869 nheads = 0;
870 }
871 if (unlikely(vq_log)) 884 if (unlikely(vq_log))
872 vhost_log_write(vq, vq_log, log, vhost_len); 885 vhost_log_write(vq, vq_log, log, vhost_len);
873 total_len += vhost_len; 886 total_len += vhost_len;
@@ -878,9 +891,7 @@ static void handle_rx(struct vhost_net *net)
878 } 891 }
879 vhost_net_enable_vq(net, vq); 892 vhost_net_enable_vq(net, vq);
880out: 893out:
881 if (nheads) 894 vhost_rx_signal_used(nvq);
882 vhost_add_used_and_signal_n(&net->dev, vq, vq->heads,
883 nheads);
884 mutex_unlock(&vq->mutex); 895 mutex_unlock(&vq->mutex);
885} 896}
886 897
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index c5ec89732a8d..8c317737ba3f 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -1017,6 +1017,7 @@ struct bpf_prog_info {
1017 __aligned_u64 map_ids; 1017 __aligned_u64 map_ids;
1018 char name[BPF_OBJ_NAME_LEN]; 1018 char name[BPF_OBJ_NAME_LEN];
1019 __u32 ifindex; 1019 __u32 ifindex;
1020 __u32 :32;
1020 __u64 netns_dev; 1021 __u64 netns_dev;
1021 __u64 netns_ino; 1022 __u64 netns_ino;
1022} __attribute__((aligned(8))); 1023} __attribute__((aligned(8)));
@@ -1030,6 +1031,7 @@ struct bpf_map_info {
1030 __u32 map_flags; 1031 __u32 map_flags;
1031 char name[BPF_OBJ_NAME_LEN]; 1032 char name[BPF_OBJ_NAME_LEN];
1032 __u32 ifindex; 1033 __u32 ifindex;
1034 __u32 :32;
1033 __u64 netns_dev; 1035 __u64 netns_dev;
1034 __u64 netns_ino; 1036 __u64 netns_ino;
1035} __attribute__((aligned(8))); 1037} __attribute__((aligned(8)));
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
index 28a4c3490359..6ba639f6c51d 100644
--- a/net/bridge/netfilter/ebtables.c
+++ b/net/bridge/netfilter/ebtables.c
@@ -1954,7 +1954,8 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt,
1954 int off, pad = 0; 1954 int off, pad = 0;
1955 unsigned int size_kern, match_size = mwt->match_size; 1955 unsigned int size_kern, match_size = mwt->match_size;
1956 1956
1957 strlcpy(name, mwt->u.name, sizeof(name)); 1957 if (strscpy(name, mwt->u.name, sizeof(name)) < 0)
1958 return -EINVAL;
1958 1959
1959 if (state->buf_kern_start) 1960 if (state->buf_kern_start)
1960 dst = state->buf_kern_start + state->buf_kern_offset; 1961 dst = state->buf_kern_start + state->buf_kern_offset;
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index c476f0794132..bb7e80f4ced3 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -1214,9 +1214,6 @@ static ssize_t xps_cpus_show(struct netdev_queue *queue,
1214 cpumask_var_t mask; 1214 cpumask_var_t mask;
1215 unsigned long index; 1215 unsigned long index;
1216 1216
1217 if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
1218 return -ENOMEM;
1219
1220 index = get_netdev_queue_index(queue); 1217 index = get_netdev_queue_index(queue);
1221 1218
1222 if (dev->num_tc) { 1219 if (dev->num_tc) {
@@ -1226,6 +1223,9 @@ static ssize_t xps_cpus_show(struct netdev_queue *queue,
1226 return -EINVAL; 1223 return -EINVAL;
1227 } 1224 }
1228 1225
1226 if (!zalloc_cpumask_var(&mask, GFP_KERNEL))
1227 return -ENOMEM;
1228
1229 rcu_read_lock(); 1229 rcu_read_lock();
1230 dev_maps = rcu_dereference(dev->xps_maps); 1230 dev_maps = rcu_dereference(dev->xps_maps);
1231 if (dev_maps) { 1231 if (dev_maps) {
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index 6b0e362cc99b..38d906baf1df 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -328,7 +328,7 @@ static int ip_tunnel_bind_dev(struct net_device *dev)
328 328
329 if (tdev) { 329 if (tdev) {
330 hlen = tdev->hard_header_len + tdev->needed_headroom; 330 hlen = tdev->hard_header_len + tdev->needed_headroom;
331 mtu = tdev->mtu; 331 mtu = min(tdev->mtu, IP_MAX_MTU);
332 } 332 }
333 333
334 dev->needed_headroom = t_hlen + hlen; 334 dev->needed_headroom = t_hlen + hlen;
@@ -362,7 +362,7 @@ static struct ip_tunnel *ip_tunnel_create(struct net *net,
362 nt = netdev_priv(dev); 362 nt = netdev_priv(dev);
363 t_hlen = nt->hlen + sizeof(struct iphdr); 363 t_hlen = nt->hlen + sizeof(struct iphdr);
364 dev->min_mtu = ETH_MIN_MTU; 364 dev->min_mtu = ETH_MIN_MTU;
365 dev->max_mtu = 0xFFF8 - dev->hard_header_len - t_hlen; 365 dev->max_mtu = IP_MAX_MTU - dev->hard_header_len - t_hlen;
366 ip_tunnel_add(itn, nt); 366 ip_tunnel_add(itn, nt);
367 return nt; 367 return nt;
368 368
@@ -930,7 +930,7 @@ int __ip_tunnel_change_mtu(struct net_device *dev, int new_mtu, bool strict)
930{ 930{
931 struct ip_tunnel *tunnel = netdev_priv(dev); 931 struct ip_tunnel *tunnel = netdev_priv(dev);
932 int t_hlen = tunnel->hlen + sizeof(struct iphdr); 932 int t_hlen = tunnel->hlen + sizeof(struct iphdr);
933 int max_mtu = 0xFFF8 - dev->hard_header_len - t_hlen; 933 int max_mtu = IP_MAX_MTU - dev->hard_header_len - t_hlen;
934 934
935 if (new_mtu < ETH_MIN_MTU) 935 if (new_mtu < ETH_MIN_MTU)
936 return -EINVAL; 936 return -EINVAL;
@@ -1107,7 +1107,7 @@ int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
1107 1107
1108 mtu = ip_tunnel_bind_dev(dev); 1108 mtu = ip_tunnel_bind_dev(dev);
1109 if (tb[IFLA_MTU]) { 1109 if (tb[IFLA_MTU]) {
1110 unsigned int max = 0xfff8 - dev->hard_header_len - nt->hlen; 1110 unsigned int max = IP_MAX_MTU - dev->hard_header_len - nt->hlen;
1111 1111
1112 mtu = clamp(dev->mtu, (unsigned int)ETH_MIN_MTU, 1112 mtu = clamp(dev->mtu, (unsigned int)ETH_MIN_MTU,
1113 (unsigned int)(max - sizeof(struct iphdr))); 1113 (unsigned int)(max - sizeof(struct iphdr)));
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index da66aaac51ce..00e138a44cbb 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1692,8 +1692,13 @@ int ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
1692 if (new_mtu < ETH_MIN_MTU) 1692 if (new_mtu < ETH_MIN_MTU)
1693 return -EINVAL; 1693 return -EINVAL;
1694 } 1694 }
1695 if (new_mtu > 0xFFF8 - dev->hard_header_len) 1695 if (tnl->parms.proto == IPPROTO_IPV6 || tnl->parms.proto == 0) {
1696 return -EINVAL; 1696 if (new_mtu > IP6_MAX_MTU - dev->hard_header_len)
1697 return -EINVAL;
1698 } else {
1699 if (new_mtu > IP_MAX_MTU - dev->hard_header_len)
1700 return -EINVAL;
1701 }
1697 dev->mtu = new_mtu; 1702 dev->mtu = new_mtu;
1698 return 0; 1703 return 0;
1699} 1704}
@@ -1841,7 +1846,7 @@ ip6_tnl_dev_init_gen(struct net_device *dev)
1841 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) 1846 if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
1842 dev->mtu -= 8; 1847 dev->mtu -= 8;
1843 dev->min_mtu = ETH_MIN_MTU; 1848 dev->min_mtu = ETH_MIN_MTU;
1844 dev->max_mtu = 0xFFF8 - dev->hard_header_len; 1849 dev->max_mtu = IP6_MAX_MTU - dev->hard_header_len;
1845 1850
1846 return 0; 1851 return 0;
1847 1852
diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c
index 5fe139484919..bf4763fd68c2 100644
--- a/net/ipv6/seg6_iptunnel.c
+++ b/net/ipv6/seg6_iptunnel.c
@@ -103,7 +103,7 @@ int seg6_do_srh_encap(struct sk_buff *skb, struct ipv6_sr_hdr *osrh, int proto)
103 hdrlen = (osrh->hdrlen + 1) << 3; 103 hdrlen = (osrh->hdrlen + 1) << 3;
104 tot_len = hdrlen + sizeof(*hdr); 104 tot_len = hdrlen + sizeof(*hdr);
105 105
106 err = skb_cow_head(skb, tot_len); 106 err = skb_cow_head(skb, tot_len + skb->mac_len);
107 if (unlikely(err)) 107 if (unlikely(err))
108 return err; 108 return err;
109 109
@@ -161,7 +161,7 @@ int seg6_do_srh_inline(struct sk_buff *skb, struct ipv6_sr_hdr *osrh)
161 161
162 hdrlen = (osrh->hdrlen + 1) << 3; 162 hdrlen = (osrh->hdrlen + 1) << 3;
163 163
164 err = skb_cow_head(skb, hdrlen); 164 err = skb_cow_head(skb, hdrlen + skb->mac_len);
165 if (unlikely(err)) 165 if (unlikely(err))
166 return err; 166 return err;
167 167
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
index 2afce37a7177..e9400ffa7875 100644
--- a/net/ipv6/sit.c
+++ b/net/ipv6/sit.c
@@ -1371,7 +1371,7 @@ static void ipip6_tunnel_setup(struct net_device *dev)
1371 dev->hard_header_len = LL_MAX_HEADER + t_hlen; 1371 dev->hard_header_len = LL_MAX_HEADER + t_hlen;
1372 dev->mtu = ETH_DATA_LEN - t_hlen; 1372 dev->mtu = ETH_DATA_LEN - t_hlen;
1373 dev->min_mtu = IPV6_MIN_MTU; 1373 dev->min_mtu = IPV6_MIN_MTU;
1374 dev->max_mtu = 0xFFF8 - t_hlen; 1374 dev->max_mtu = IP6_MAX_MTU - t_hlen;
1375 dev->flags = IFF_NOARP; 1375 dev->flags = IFF_NOARP;
1376 netif_keep_dst(dev); 1376 netif_keep_dst(dev);
1377 dev->addr_len = 4; 1377 dev->addr_len = 4;
@@ -1583,7 +1583,8 @@ static int ipip6_newlink(struct net *src_net, struct net_device *dev,
1583 if (tb[IFLA_MTU]) { 1583 if (tb[IFLA_MTU]) {
1584 u32 mtu = nla_get_u32(tb[IFLA_MTU]); 1584 u32 mtu = nla_get_u32(tb[IFLA_MTU]);
1585 1585
1586 if (mtu >= IPV6_MIN_MTU && mtu <= 0xFFF8 - dev->hard_header_len) 1586 if (mtu >= IPV6_MIN_MTU &&
1587 mtu <= IP6_MAX_MTU - dev->hard_header_len)
1587 dev->mtu = mtu; 1588 dev->mtu = mtu;
1588 } 1589 }
1589 1590
diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
index 416fe67271a9..86dba282a147 100644
--- a/net/ipv6/xfrm6_policy.c
+++ b/net/ipv6/xfrm6_policy.c
@@ -126,7 +126,7 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
126 struct flowi6 *fl6 = &fl->u.ip6; 126 struct flowi6 *fl6 = &fl->u.ip6;
127 int onlyproto = 0; 127 int onlyproto = 0;
128 const struct ipv6hdr *hdr = ipv6_hdr(skb); 128 const struct ipv6hdr *hdr = ipv6_hdr(skb);
129 u16 offset = sizeof(*hdr); 129 u32 offset = sizeof(*hdr);
130 struct ipv6_opt_hdr *exthdr; 130 struct ipv6_opt_hdr *exthdr;
131 const unsigned char *nh = skb_network_header(skb); 131 const unsigned char *nh = skb_network_header(skb);
132 u16 nhoff = IP6CB(skb)->nhoff; 132 u16 nhoff = IP6CB(skb)->nhoff;
diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c
index dc76bc346829..d3601d421571 100644
--- a/net/kcm/kcmsock.c
+++ b/net/kcm/kcmsock.c
@@ -1671,7 +1671,7 @@ static struct file *kcm_clone(struct socket *osock)
1671 __module_get(newsock->ops->owner); 1671 __module_get(newsock->ops->owner);
1672 1672
1673 newsk = sk_alloc(sock_net(osock->sk), PF_KCM, GFP_KERNEL, 1673 newsk = sk_alloc(sock_net(osock->sk), PF_KCM, GFP_KERNEL,
1674 &kcm_proto, true); 1674 &kcm_proto, false);
1675 if (!newsk) { 1675 if (!newsk) {
1676 sock_release(newsock); 1676 sock_release(newsock);
1677 return ERR_PTR(-ENOMEM); 1677 return ERR_PTR(-ENOMEM);
diff --git a/net/ncsi/ncsi-netlink.c b/net/ncsi/ncsi-netlink.c
index 8d7e849d4825..41cede4041d3 100644
--- a/net/ncsi/ncsi-netlink.c
+++ b/net/ncsi/ncsi-netlink.c
@@ -215,7 +215,7 @@ err:
215static int ncsi_pkg_info_all_nl(struct sk_buff *skb, 215static int ncsi_pkg_info_all_nl(struct sk_buff *skb,
216 struct netlink_callback *cb) 216 struct netlink_callback *cb)
217{ 217{
218 struct nlattr *attrs[NCSI_ATTR_MAX]; 218 struct nlattr *attrs[NCSI_ATTR_MAX + 1];
219 struct ncsi_package *np, *package; 219 struct ncsi_package *np, *package;
220 struct ncsi_dev_priv *ndp; 220 struct ncsi_dev_priv *ndp;
221 unsigned int package_id; 221 unsigned int package_id;
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index f36098887ad0..3ecca0616d8c 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -2381,8 +2381,10 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
2381 struct ipvs_sync_daemon_cfg cfg; 2381 struct ipvs_sync_daemon_cfg cfg;
2382 2382
2383 memset(&cfg, 0, sizeof(cfg)); 2383 memset(&cfg, 0, sizeof(cfg));
2384 strlcpy(cfg.mcast_ifn, dm->mcast_ifn, 2384 ret = -EINVAL;
2385 sizeof(cfg.mcast_ifn)); 2385 if (strscpy(cfg.mcast_ifn, dm->mcast_ifn,
2386 sizeof(cfg.mcast_ifn)) <= 0)
2387 goto out_dec;
2386 cfg.syncid = dm->syncid; 2388 cfg.syncid = dm->syncid;
2387 ret = start_sync_thread(ipvs, &cfg, dm->state); 2389 ret = start_sync_thread(ipvs, &cfg, dm->state);
2388 } else { 2390 } else {
@@ -2420,12 +2422,19 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
2420 } 2422 }
2421 } 2423 }
2422 2424
2425 if ((cmd == IP_VS_SO_SET_ADD || cmd == IP_VS_SO_SET_EDIT) &&
2426 strnlen(usvc.sched_name, IP_VS_SCHEDNAME_MAXLEN) ==
2427 IP_VS_SCHEDNAME_MAXLEN) {
2428 ret = -EINVAL;
2429 goto out_unlock;
2430 }
2431
2423 /* Check for valid protocol: TCP or UDP or SCTP, even for fwmark!=0 */ 2432 /* Check for valid protocol: TCP or UDP or SCTP, even for fwmark!=0 */
2424 if (usvc.protocol != IPPROTO_TCP && usvc.protocol != IPPROTO_UDP && 2433 if (usvc.protocol != IPPROTO_TCP && usvc.protocol != IPPROTO_UDP &&
2425 usvc.protocol != IPPROTO_SCTP) { 2434 usvc.protocol != IPPROTO_SCTP) {
2426 pr_err("set_ctl: invalid protocol: %d %pI4:%d %s\n", 2435 pr_err("set_ctl: invalid protocol: %d %pI4:%d\n",
2427 usvc.protocol, &usvc.addr.ip, 2436 usvc.protocol, &usvc.addr.ip,
2428 ntohs(usvc.port), usvc.sched_name); 2437 ntohs(usvc.port));
2429 ret = -EFAULT; 2438 ret = -EFAULT;
2430 goto out_unlock; 2439 goto out_unlock;
2431 } 2440 }
@@ -2847,7 +2856,7 @@ static const struct nla_policy ip_vs_cmd_policy[IPVS_CMD_ATTR_MAX + 1] = {
2847static const struct nla_policy ip_vs_daemon_policy[IPVS_DAEMON_ATTR_MAX + 1] = { 2856static const struct nla_policy ip_vs_daemon_policy[IPVS_DAEMON_ATTR_MAX + 1] = {
2848 [IPVS_DAEMON_ATTR_STATE] = { .type = NLA_U32 }, 2857 [IPVS_DAEMON_ATTR_STATE] = { .type = NLA_U32 },
2849 [IPVS_DAEMON_ATTR_MCAST_IFN] = { .type = NLA_NUL_STRING, 2858 [IPVS_DAEMON_ATTR_MCAST_IFN] = { .type = NLA_NUL_STRING,
2850 .len = IP_VS_IFNAME_MAXLEN }, 2859 .len = IP_VS_IFNAME_MAXLEN - 1 },
2851 [IPVS_DAEMON_ATTR_SYNC_ID] = { .type = NLA_U32 }, 2860 [IPVS_DAEMON_ATTR_SYNC_ID] = { .type = NLA_U32 },
2852 [IPVS_DAEMON_ATTR_SYNC_MAXLEN] = { .type = NLA_U16 }, 2861 [IPVS_DAEMON_ATTR_SYNC_MAXLEN] = { .type = NLA_U16 },
2853 [IPVS_DAEMON_ATTR_MCAST_GROUP] = { .type = NLA_U32 }, 2862 [IPVS_DAEMON_ATTR_MCAST_GROUP] = { .type = NLA_U32 },
@@ -2865,7 +2874,7 @@ static const struct nla_policy ip_vs_svc_policy[IPVS_SVC_ATTR_MAX + 1] = {
2865 [IPVS_SVC_ATTR_PORT] = { .type = NLA_U16 }, 2874 [IPVS_SVC_ATTR_PORT] = { .type = NLA_U16 },
2866 [IPVS_SVC_ATTR_FWMARK] = { .type = NLA_U32 }, 2875 [IPVS_SVC_ATTR_FWMARK] = { .type = NLA_U32 },
2867 [IPVS_SVC_ATTR_SCHED_NAME] = { .type = NLA_NUL_STRING, 2876 [IPVS_SVC_ATTR_SCHED_NAME] = { .type = NLA_NUL_STRING,
2868 .len = IP_VS_SCHEDNAME_MAXLEN }, 2877 .len = IP_VS_SCHEDNAME_MAXLEN - 1 },
2869 [IPVS_SVC_ATTR_PE_NAME] = { .type = NLA_NUL_STRING, 2878 [IPVS_SVC_ATTR_PE_NAME] = { .type = NLA_NUL_STRING,
2870 .len = IP_VS_PENAME_MAXLEN }, 2879 .len = IP_VS_PENAME_MAXLEN },
2871 [IPVS_SVC_ATTR_FLAGS] = { .type = NLA_BINARY, 2880 [IPVS_SVC_ATTR_FLAGS] = { .type = NLA_BINARY,
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 91e80aa852d6..501e48a7965b 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -1298,8 +1298,10 @@ static void nft_chain_stats_replace(struct nft_base_chain *chain,
1298 rcu_assign_pointer(chain->stats, newstats); 1298 rcu_assign_pointer(chain->stats, newstats);
1299 synchronize_rcu(); 1299 synchronize_rcu();
1300 free_percpu(oldstats); 1300 free_percpu(oldstats);
1301 } else 1301 } else {
1302 rcu_assign_pointer(chain->stats, newstats); 1302 rcu_assign_pointer(chain->stats, newstats);
1303 static_branch_inc(&nft_counters_enabled);
1304 }
1303} 1305}
1304 1306
1305static void nf_tables_chain_destroy(struct nft_ctx *ctx) 1307static void nf_tables_chain_destroy(struct nft_ctx *ctx)
@@ -4706,7 +4708,7 @@ static int nf_tables_dump_obj(struct sk_buff *skb, struct netlink_callback *cb)
4706 if (idx > s_idx) 4708 if (idx > s_idx)
4707 memset(&cb->args[1], 0, 4709 memset(&cb->args[1], 0,
4708 sizeof(cb->args) - sizeof(cb->args[0])); 4710 sizeof(cb->args) - sizeof(cb->args[0]));
4709 if (filter && filter->table[0] && 4711 if (filter && filter->table &&
4710 strcmp(filter->table, table->name)) 4712 strcmp(filter->table, table->name))
4711 goto cont; 4713 goto cont;
4712 if (filter && 4714 if (filter &&
@@ -5380,7 +5382,7 @@ static int nf_tables_dump_flowtable(struct sk_buff *skb,
5380 if (idx > s_idx) 5382 if (idx > s_idx)
5381 memset(&cb->args[1], 0, 5383 memset(&cb->args[1], 0,
5382 sizeof(cb->args) - sizeof(cb->args[0])); 5384 sizeof(cb->args) - sizeof(cb->args[0]));
5383 if (filter && filter->table[0] && 5385 if (filter && filter->table &&
5384 strcmp(filter->table, table->name)) 5386 strcmp(filter->table, table->name))
5385 goto cont; 5387 goto cont;
5386 5388
diff --git a/net/netfilter/nf_tables_core.c b/net/netfilter/nf_tables_core.c
index 942702a2776f..40e744572283 100644
--- a/net/netfilter/nf_tables_core.c
+++ b/net/netfilter/nf_tables_core.c
@@ -126,15 +126,15 @@ static noinline void nft_update_chain_stats(const struct nft_chain *chain,
126 if (!base_chain->stats) 126 if (!base_chain->stats)
127 return; 127 return;
128 128
129 local_bh_disable();
129 stats = this_cpu_ptr(rcu_dereference(base_chain->stats)); 130 stats = this_cpu_ptr(rcu_dereference(base_chain->stats));
130 if (stats) { 131 if (stats) {
131 local_bh_disable();
132 u64_stats_update_begin(&stats->syncp); 132 u64_stats_update_begin(&stats->syncp);
133 stats->pkts++; 133 stats->pkts++;
134 stats->bytes += pkt->skb->len; 134 stats->bytes += pkt->skb->len;
135 u64_stats_update_end(&stats->syncp); 135 u64_stats_update_end(&stats->syncp);
136 local_bh_enable();
137 } 136 }
137 local_bh_enable();
138} 138}
139 139
140struct nft_jumpstack { 140struct nft_jumpstack {
diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c
index 6ddf89183e7b..a0e5adf0b3b6 100644
--- a/net/netfilter/nfnetlink_acct.c
+++ b/net/netfilter/nfnetlink_acct.c
@@ -115,7 +115,7 @@ static int nfnl_acct_new(struct net *net, struct sock *nfnl,
115 nfacct->flags = flags; 115 nfacct->flags = flags;
116 } 116 }
117 117
118 nla_strlcpy(nfacct->name, nla_data(tb[NFACCT_NAME]), NFACCT_NAME_MAX); 118 nla_strlcpy(nfacct->name, tb[NFACCT_NAME], NFACCT_NAME_MAX);
119 119
120 if (tb[NFACCT_BYTES]) { 120 if (tb[NFACCT_BYTES]) {
121 atomic64_set(&nfacct->bytes, 121 atomic64_set(&nfacct->bytes,
diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c
index fa026b269b36..cb5b5f207777 100644
--- a/net/netfilter/nfnetlink_cthelper.c
+++ b/net/netfilter/nfnetlink_cthelper.c
@@ -150,7 +150,7 @@ nfnl_cthelper_expect_policy(struct nf_conntrack_expect_policy *expect_policy,
150 return -EINVAL; 150 return -EINVAL;
151 151
152 nla_strlcpy(expect_policy->name, 152 nla_strlcpy(expect_policy->name,
153 nla_data(tb[NFCTH_POLICY_NAME]), NF_CT_HELPER_NAME_LEN); 153 tb[NFCTH_POLICY_NAME], NF_CT_HELPER_NAME_LEN);
154 expect_policy->max_expected = 154 expect_policy->max_expected =
155 ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_MAX])); 155 ntohl(nla_get_be32(tb[NFCTH_POLICY_EXPECT_MAX]));
156 if (expect_policy->max_expected > NF_CT_EXPECT_MAX_CNT) 156 if (expect_policy->max_expected > NF_CT_EXPECT_MAX_CNT)
@@ -235,7 +235,7 @@ nfnl_cthelper_create(const struct nlattr * const tb[],
235 goto err1; 235 goto err1;
236 236
237 nla_strlcpy(helper->name, 237 nla_strlcpy(helper->name,
238 nla_data(tb[NFCTH_NAME]), NF_CT_HELPER_NAME_LEN); 238 tb[NFCTH_NAME], NF_CT_HELPER_NAME_LEN);
239 size = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN])); 239 size = ntohl(nla_get_be32(tb[NFCTH_PRIV_DATA_LEN]));
240 if (size > FIELD_SIZEOF(struct nf_conn_help, data)) { 240 if (size > FIELD_SIZEOF(struct nf_conn_help, data)) {
241 ret = -ENOMEM; 241 ret = -ENOMEM;
diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c
index ea737fd789e8..5c0de704bad5 100644
--- a/net/netfilter/nft_ct.c
+++ b/net/netfilter/nft_ct.c
@@ -880,22 +880,26 @@ static int nft_ct_helper_obj_dump(struct sk_buff *skb,
880 struct nft_object *obj, bool reset) 880 struct nft_object *obj, bool reset)
881{ 881{
882 const struct nft_ct_helper_obj *priv = nft_obj_data(obj); 882 const struct nft_ct_helper_obj *priv = nft_obj_data(obj);
883 const struct nf_conntrack_helper *helper = priv->helper4; 883 const struct nf_conntrack_helper *helper;
884 u16 family; 884 u16 family;
885 885
886 if (priv->helper4 && priv->helper6) {
887 family = NFPROTO_INET;
888 helper = priv->helper4;
889 } else if (priv->helper6) {
890 family = NFPROTO_IPV6;
891 helper = priv->helper6;
892 } else {
893 family = NFPROTO_IPV4;
894 helper = priv->helper4;
895 }
896
886 if (nla_put_string(skb, NFTA_CT_HELPER_NAME, helper->name)) 897 if (nla_put_string(skb, NFTA_CT_HELPER_NAME, helper->name))
887 return -1; 898 return -1;
888 899
889 if (nla_put_u8(skb, NFTA_CT_HELPER_L4PROTO, priv->l4proto)) 900 if (nla_put_u8(skb, NFTA_CT_HELPER_L4PROTO, priv->l4proto))
890 return -1; 901 return -1;
891 902
892 if (priv->helper4 && priv->helper6)
893 family = NFPROTO_INET;
894 else if (priv->helper6)
895 family = NFPROTO_IPV6;
896 else
897 family = NFPROTO_IPV4;
898
899 if (nla_put_be16(skb, NFTA_CT_HELPER_L3PROTO, htons(family))) 903 if (nla_put_be16(skb, NFTA_CT_HELPER_L3PROTO, htons(family)))
900 return -1; 904 return -1;
901 905
diff --git a/net/netfilter/nft_limit.c b/net/netfilter/nft_limit.c
index a9fc298ef4c3..72f13a1144dd 100644
--- a/net/netfilter/nft_limit.c
+++ b/net/netfilter/nft_limit.c
@@ -51,10 +51,13 @@ static inline bool nft_limit_eval(struct nft_limit *limit, u64 cost)
51 return !limit->invert; 51 return !limit->invert;
52} 52}
53 53
54/* Use same default as in iptables. */
55#define NFT_LIMIT_PKT_BURST_DEFAULT 5
56
54static int nft_limit_init(struct nft_limit *limit, 57static int nft_limit_init(struct nft_limit *limit,
55 const struct nlattr * const tb[]) 58 const struct nlattr * const tb[], bool pkts)
56{ 59{
57 u64 unit; 60 u64 unit, tokens;
58 61
59 if (tb[NFTA_LIMIT_RATE] == NULL || 62 if (tb[NFTA_LIMIT_RATE] == NULL ||
60 tb[NFTA_LIMIT_UNIT] == NULL) 63 tb[NFTA_LIMIT_UNIT] == NULL)
@@ -68,18 +71,25 @@ static int nft_limit_init(struct nft_limit *limit,
68 71
69 if (tb[NFTA_LIMIT_BURST]) 72 if (tb[NFTA_LIMIT_BURST])
70 limit->burst = ntohl(nla_get_be32(tb[NFTA_LIMIT_BURST])); 73 limit->burst = ntohl(nla_get_be32(tb[NFTA_LIMIT_BURST]));
71 else 74
72 limit->burst = 0; 75 if (pkts && limit->burst == 0)
76 limit->burst = NFT_LIMIT_PKT_BURST_DEFAULT;
73 77
74 if (limit->rate + limit->burst < limit->rate) 78 if (limit->rate + limit->burst < limit->rate)
75 return -EOVERFLOW; 79 return -EOVERFLOW;
76 80
77 /* The token bucket size limits the number of tokens can be 81 if (pkts) {
78 * accumulated. tokens_max specifies the bucket size. 82 tokens = div_u64(limit->nsecs, limit->rate) * limit->burst;
79 * tokens_max = unit * (rate + burst) / rate. 83 } else {
80 */ 84 /* The token bucket size limits the number of tokens can be
81 limit->tokens = div_u64(limit->nsecs * (limit->rate + limit->burst), 85 * accumulated. tokens_max specifies the bucket size.
82 limit->rate); 86 * tokens_max = unit * (rate + burst) / rate.
87 */
88 tokens = div_u64(limit->nsecs * (limit->rate + limit->burst),
89 limit->rate);
90 }
91
92 limit->tokens = tokens;
83 limit->tokens_max = limit->tokens; 93 limit->tokens_max = limit->tokens;
84 94
85 if (tb[NFTA_LIMIT_FLAGS]) { 95 if (tb[NFTA_LIMIT_FLAGS]) {
@@ -144,7 +154,7 @@ static int nft_limit_pkts_init(const struct nft_ctx *ctx,
144 struct nft_limit_pkts *priv = nft_expr_priv(expr); 154 struct nft_limit_pkts *priv = nft_expr_priv(expr);
145 int err; 155 int err;
146 156
147 err = nft_limit_init(&priv->limit, tb); 157 err = nft_limit_init(&priv->limit, tb, true);
148 if (err < 0) 158 if (err < 0)
149 return err; 159 return err;
150 160
@@ -185,7 +195,7 @@ static int nft_limit_bytes_init(const struct nft_ctx *ctx,
185{ 195{
186 struct nft_limit *priv = nft_expr_priv(expr); 196 struct nft_limit *priv = nft_expr_priv(expr);
187 197
188 return nft_limit_init(priv, tb); 198 return nft_limit_init(priv, tb, false);
189} 199}
190 200
191static int nft_limit_bytes_dump(struct sk_buff *skb, 201static int nft_limit_bytes_dump(struct sk_buff *skb,
@@ -246,7 +256,7 @@ static int nft_limit_obj_pkts_init(const struct nft_ctx *ctx,
246 struct nft_limit_pkts *priv = nft_obj_data(obj); 256 struct nft_limit_pkts *priv = nft_obj_data(obj);
247 int err; 257 int err;
248 258
249 err = nft_limit_init(&priv->limit, tb); 259 err = nft_limit_init(&priv->limit, tb, true);
250 if (err < 0) 260 if (err < 0)
251 return err; 261 return err;
252 262
@@ -289,7 +299,7 @@ static int nft_limit_obj_bytes_init(const struct nft_ctx *ctx,
289{ 299{
290 struct nft_limit *priv = nft_obj_data(obj); 300 struct nft_limit *priv = nft_obj_data(obj);
291 301
292 return nft_limit_init(priv, tb); 302 return nft_limit_init(priv, tb, false);
293} 303}
294 304
295static int nft_limit_obj_bytes_dump(struct sk_buff *skb, 305static int nft_limit_obj_bytes_dump(struct sk_buff *skb,
diff --git a/net/netfilter/nft_meta.c b/net/netfilter/nft_meta.c
index 8fb91940e2e7..204af9899482 100644
--- a/net/netfilter/nft_meta.c
+++ b/net/netfilter/nft_meta.c
@@ -234,7 +234,7 @@ void nft_meta_set_eval(const struct nft_expr *expr,
234 struct sk_buff *skb = pkt->skb; 234 struct sk_buff *skb = pkt->skb;
235 u32 *sreg = &regs->data[meta->sreg]; 235 u32 *sreg = &regs->data[meta->sreg];
236 u32 value = *sreg; 236 u32 value = *sreg;
237 u8 pkt_type; 237 u8 value8;
238 238
239 switch (meta->key) { 239 switch (meta->key) {
240 case NFT_META_MARK: 240 case NFT_META_MARK:
@@ -244,15 +244,17 @@ void nft_meta_set_eval(const struct nft_expr *expr,
244 skb->priority = value; 244 skb->priority = value;
245 break; 245 break;
246 case NFT_META_PKTTYPE: 246 case NFT_META_PKTTYPE:
247 pkt_type = nft_reg_load8(sreg); 247 value8 = nft_reg_load8(sreg);
248 248
249 if (skb->pkt_type != pkt_type && 249 if (skb->pkt_type != value8 &&
250 skb_pkt_type_ok(pkt_type) && 250 skb_pkt_type_ok(value8) &&
251 skb_pkt_type_ok(skb->pkt_type)) 251 skb_pkt_type_ok(skb->pkt_type))
252 skb->pkt_type = pkt_type; 252 skb->pkt_type = value8;
253 break; 253 break;
254 case NFT_META_NFTRACE: 254 case NFT_META_NFTRACE:
255 skb->nf_trace = !!value; 255 value8 = nft_reg_load8(sreg);
256
257 skb->nf_trace = !!value8;
256 break; 258 break;
257 default: 259 default:
258 WARN_ON(1); 260 WARN_ON(1);
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
index d964e60c730e..c79f6e71512e 100644
--- a/net/sched/cls_flower.c
+++ b/net/sched/cls_flower.c
@@ -977,7 +977,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
977 return 0; 977 return 0;
978 978
979errout_idr: 979errout_idr:
980 if (fnew->handle) 980 if (!fold)
981 idr_remove(&head->handle_idr, fnew->handle); 981 idr_remove(&head->handle_idr, fnew->handle);
982errout: 982errout:
983 tcf_exts_destroy(&fnew->exts); 983 tcf_exts_destroy(&fnew->exts);
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 40b54cc64243..5f48251c1319 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -1658,7 +1658,6 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy,
1658 trailer_len -= xdst_prev->u.dst.xfrm->props.trailer_len; 1658 trailer_len -= xdst_prev->u.dst.xfrm->props.trailer_len;
1659 } 1659 }
1660 1660
1661out:
1662 return &xdst0->u.dst; 1661 return &xdst0->u.dst;
1663 1662
1664put_states: 1663put_states:
@@ -1667,8 +1666,8 @@ put_states:
1667free_dst: 1666free_dst:
1668 if (xdst0) 1667 if (xdst0)
1669 dst_release_immediate(&xdst0->u.dst); 1668 dst_release_immediate(&xdst0->u.dst);
1670 xdst0 = ERR_PTR(err); 1669
1671 goto out; 1670 return ERR_PTR(err);
1672} 1671}
1673 1672
1674static int xfrm_expand_policies(const struct flowi *fl, u16 family, 1673static int xfrm_expand_policies(const struct flowi *fl, u16 family,
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index c5ec89732a8d..8c317737ba3f 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -1017,6 +1017,7 @@ struct bpf_prog_info {
1017 __aligned_u64 map_ids; 1017 __aligned_u64 map_ids;
1018 char name[BPF_OBJ_NAME_LEN]; 1018 char name[BPF_OBJ_NAME_LEN];
1019 __u32 ifindex; 1019 __u32 ifindex;
1020 __u32 :32;
1020 __u64 netns_dev; 1021 __u64 netns_dev;
1021 __u64 netns_ino; 1022 __u64 netns_ino;
1022} __attribute__((aligned(8))); 1023} __attribute__((aligned(8)));
@@ -1030,6 +1031,7 @@ struct bpf_map_info {
1030 __u32 map_flags; 1031 __u32 map_flags;
1031 char name[BPF_OBJ_NAME_LEN]; 1032 char name[BPF_OBJ_NAME_LEN];
1032 __u32 ifindex; 1033 __u32 ifindex;
1034 __u32 :32;
1033 __u64 netns_dev; 1035 __u64 netns_dev;
1034 __u64 netns_ino; 1036 __u64 netns_ino;
1035} __attribute__((aligned(8))); 1037} __attribute__((aligned(8)));