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

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

Merge in late fixes to prepare for the 6.5 net-next PR.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+418 -196
+2 -1
MAINTAINERS
··· 3606 3606 W: http://www.bluez.org/ 3607 3607 T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git 3608 3608 T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git 3609 + F: Documentation/devicetree/bindings/net/bluetooth/ 3609 3610 F: drivers/bluetooth/ 3610 3611 3611 3612 BLUETOOTH SUBSYSTEM ··· 12550 12549 12551 12550 MARVELL OCTEON ENDPOINT DRIVER 12552 12551 M: Veerasenareddy Burru <vburru@marvell.com> 12553 - M: Abhijit Ayarekar <aayarekar@marvell.com> 12552 + M: Sathesh Edara <sedara@marvell.com> 12554 12553 L: netdev@vger.kernel.org 12555 12554 S: Supported 12556 12555 F: drivers/net/ethernet/marvell/octeon_ep
+1 -1
drivers/net/bonding/bond_main.c
··· 4200 4200 return skb->hash; 4201 4201 4202 4202 return __bond_xmit_hash(bond, skb, skb->data, skb->protocol, 4203 - skb_mac_offset(skb), skb_network_offset(skb), 4203 + 0, skb_network_offset(skb), 4204 4204 skb_headlen(skb)); 4205 4205 } 4206 4206
+2
drivers/net/ethernet/broadcom/genet/bcmmii.c
··· 673 673 if (of_phy_is_fixed_link(dn)) 674 674 of_phy_deregister_fixed_link(dn); 675 675 of_node_put(priv->phy_dn); 676 + clk_prepare_enable(priv->clk); 676 677 platform_device_unregister(priv->mii_pdev); 678 + clk_disable_unprepare(priv->clk); 677 679 }
+6 -2
drivers/net/ethernet/intel/igc/igc.h
··· 229 229 230 230 struct ptp_clock *ptp_clock; 231 231 struct ptp_clock_info ptp_caps; 232 - struct work_struct ptp_tx_work; 232 + /* Access to ptp_tx_skb and ptp_tx_start are protected by the 233 + * ptp_tx_lock. 234 + */ 235 + spinlock_t ptp_tx_lock; 233 236 struct sk_buff *ptp_tx_skb; 234 237 struct hwtstamp_config tstamp_config; 235 238 unsigned long ptp_tx_start; ··· 432 429 __IGC_TESTING, 433 430 __IGC_RESETTING, 434 431 __IGC_DOWN, 435 - __IGC_PTP_TX_IN_PROGRESS, 436 432 }; 437 433 438 434 enum igc_tx_flags { ··· 615 613 IGC_RING_FLAG_TX_CTX_IDX, 616 614 IGC_RING_FLAG_TX_DETECT_HANG, 617 615 IGC_RING_FLAG_AF_XDP_ZC, 616 + IGC_RING_FLAG_TX_HWTSTAMP, 618 617 }; 619 618 620 619 #define ring_uses_large_buffer(ring) \ ··· 672 669 int igc_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr); 673 670 void igc_ptp_tx_hang(struct igc_adapter *adapter); 674 671 void igc_ptp_read(struct igc_adapter *adapter, struct timespec64 *ts); 672 + void igc_ptp_tx_tstamp_event(struct igc_adapter *adapter); 675 673 676 674 #define igc_rx_pg_size(_ring) (PAGE_SIZE << igc_rx_pg_order(_ring)) 677 675
+9 -5
drivers/net/ethernet/intel/igc/igc_main.c
··· 1585 1585 } 1586 1586 } 1587 1587 1588 - if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { 1588 + if (unlikely(test_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags) && 1589 + skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) { 1589 1590 /* FIXME: add support for retrieving timestamps from 1590 1591 * the other timer registers before skipping the 1591 1592 * timestamping request. 1592 1593 */ 1593 - if (adapter->tstamp_config.tx_type == HWTSTAMP_TX_ON && 1594 - !test_and_set_bit_lock(__IGC_PTP_TX_IN_PROGRESS, 1595 - &adapter->state)) { 1594 + unsigned long flags; 1595 + 1596 + spin_lock_irqsave(&adapter->ptp_tx_lock, flags); 1597 + if (!adapter->ptp_tx_skb) { 1596 1598 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; 1597 1599 tx_flags |= IGC_TX_FLAGS_TSTAMP; 1598 1600 ··· 1603 1601 } else { 1604 1602 adapter->tx_hwtstamp_skipped++; 1605 1603 } 1604 + 1605 + spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); 1606 1606 } 1607 1607 1608 1608 if (skb_vlan_tag_present(skb)) { ··· 5268 5264 5269 5265 if (tsicr & IGC_TSICR_TXTS) { 5270 5266 /* retrieve hardware timestamp */ 5271 - schedule_work(&adapter->ptp_tx_work); 5267 + igc_ptp_tx_tstamp_event(adapter); 5272 5268 ack |= IGC_TSICR_TXTS; 5273 5269 } 5274 5270
+102 -40
drivers/net/ethernet/intel/igc/igc_ptp.c
··· 536 536 wr32(IGC_TSYNCRXCTL, val); 537 537 } 538 538 539 + static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter) 540 + { 541 + unsigned long flags; 542 + 543 + spin_lock_irqsave(&adapter->ptp_tx_lock, flags); 544 + 545 + dev_kfree_skb_any(adapter->ptp_tx_skb); 546 + adapter->ptp_tx_skb = NULL; 547 + 548 + spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); 549 + } 550 + 539 551 static void igc_ptp_disable_tx_timestamp(struct igc_adapter *adapter) 540 552 { 541 553 struct igc_hw *hw = &adapter->hw; 554 + int i; 555 + 556 + /* Clear the flags first to avoid new packets to be enqueued 557 + * for TX timestamping. 558 + */ 559 + for (i = 0; i < adapter->num_tx_queues; i++) { 560 + struct igc_ring *tx_ring = adapter->tx_ring[i]; 561 + 562 + clear_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); 563 + } 564 + 565 + /* Now we can clean the pending TX timestamp requests. */ 566 + igc_ptp_clear_tx_tstamp(adapter); 542 567 543 568 wr32(IGC_TSYNCTXCTL, 0); 544 569 } ··· 571 546 static void igc_ptp_enable_tx_timestamp(struct igc_adapter *adapter) 572 547 { 573 548 struct igc_hw *hw = &adapter->hw; 549 + int i; 574 550 575 551 wr32(IGC_TSYNCTXCTL, IGC_TSYNCTXCTL_ENABLED | IGC_TSYNCTXCTL_TXSYNSIG); 576 552 577 553 /* Read TXSTMP registers to discard any timestamp previously stored. */ 578 554 rd32(IGC_TXSTMPL); 579 555 rd32(IGC_TXSTMPH); 556 + 557 + /* The hardware is ready to accept TX timestamp requests, 558 + * notify the transmit path. 559 + */ 560 + for (i = 0; i < adapter->num_tx_queues; i++) { 561 + struct igc_ring *tx_ring = adapter->tx_ring[i]; 562 + 563 + set_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags); 564 + } 565 + 580 566 } 581 567 582 568 /** ··· 639 603 return 0; 640 604 } 641 605 606 + /* Requires adapter->ptp_tx_lock held by caller. */ 642 607 static void igc_ptp_tx_timeout(struct igc_adapter *adapter) 643 608 { 644 609 struct igc_hw *hw = &adapter->hw; ··· 647 610 dev_kfree_skb_any(adapter->ptp_tx_skb); 648 611 adapter->ptp_tx_skb = NULL; 649 612 adapter->tx_hwtstamp_timeouts++; 650 - clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); 651 613 /* Clear the tx valid bit in TSYNCTXCTL register to enable interrupt. */ 652 614 rd32(IGC_TXSTMPH); 653 615 netdev_warn(adapter->netdev, "Tx timestamp timeout\n"); ··· 654 618 655 619 void igc_ptp_tx_hang(struct igc_adapter *adapter) 656 620 { 657 - bool timeout = time_is_before_jiffies(adapter->ptp_tx_start + 658 - IGC_PTP_TX_TIMEOUT); 621 + unsigned long flags; 659 622 660 - if (!test_bit(__IGC_PTP_TX_IN_PROGRESS, &adapter->state)) 661 - return; 623 + spin_lock_irqsave(&adapter->ptp_tx_lock, flags); 662 624 663 - /* If we haven't received a timestamp within the timeout, it is 664 - * reasonable to assume that it will never occur, so we can unlock the 665 - * timestamp bit when this occurs. 666 - */ 667 - if (timeout) { 668 - cancel_work_sync(&adapter->ptp_tx_work); 669 - igc_ptp_tx_timeout(adapter); 670 - } 625 + if (!adapter->ptp_tx_skb) 626 + goto unlock; 627 + 628 + if (time_is_after_jiffies(adapter->ptp_tx_start + IGC_PTP_TX_TIMEOUT)) 629 + goto unlock; 630 + 631 + igc_ptp_tx_timeout(adapter); 632 + 633 + unlock: 634 + spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); 671 635 } 672 636 673 637 /** ··· 677 641 * If we were asked to do hardware stamping and such a time stamp is 678 642 * available, then it must have been for this skb here because we only 679 643 * allow only one such packet into the queue. 644 + * 645 + * Context: Expects adapter->ptp_tx_lock to be held by caller. 680 646 */ 681 647 static void igc_ptp_tx_hwtstamp(struct igc_adapter *adapter) 682 648 { 683 649 struct sk_buff *skb = adapter->ptp_tx_skb; 684 650 struct skb_shared_hwtstamps shhwtstamps; 685 651 struct igc_hw *hw = &adapter->hw; 652 + u32 tsynctxctl; 686 653 int adjust = 0; 687 654 u64 regval; 688 655 689 656 if (WARN_ON_ONCE(!skb)) 690 657 return; 691 658 692 - regval = rd32(IGC_TXSTMPL); 693 - regval |= (u64)rd32(IGC_TXSTMPH) << 32; 659 + tsynctxctl = rd32(IGC_TSYNCTXCTL); 660 + tsynctxctl &= IGC_TSYNCTXCTL_TXTT_0; 661 + if (tsynctxctl) { 662 + regval = rd32(IGC_TXSTMPL); 663 + regval |= (u64)rd32(IGC_TXSTMPH) << 32; 664 + } else { 665 + /* There's a bug in the hardware that could cause 666 + * missing interrupts for TX timestamping. The issue 667 + * is that for new interrupts to be triggered, the 668 + * IGC_TXSTMPH_0 register must be read. 669 + * 670 + * To avoid discarding a valid timestamp that just 671 + * happened at the "wrong" time, we need to confirm 672 + * that there was no timestamp captured, we do that by 673 + * assuming that no two timestamps in sequence have 674 + * the same nanosecond value. 675 + * 676 + * So, we read the "low" register, read the "high" 677 + * register (to latch a new timestamp) and read the 678 + * "low" register again, if "old" and "new" versions 679 + * of the "low" register are different, a valid 680 + * timestamp was captured, we can read the "high" 681 + * register again. 682 + */ 683 + u32 txstmpl_old, txstmpl_new; 684 + 685 + txstmpl_old = rd32(IGC_TXSTMPL); 686 + rd32(IGC_TXSTMPH); 687 + txstmpl_new = rd32(IGC_TXSTMPL); 688 + 689 + if (txstmpl_old == txstmpl_new) 690 + return; 691 + 692 + regval = txstmpl_new; 693 + regval |= (u64)rd32(IGC_TXSTMPH) << 32; 694 + } 694 695 if (igc_ptp_systim_to_hwtstamp(adapter, &shhwtstamps, regval)) 695 696 return; 696 697 ··· 749 676 shhwtstamps.hwtstamp = 750 677 ktime_add_ns(shhwtstamps.hwtstamp, adjust); 751 678 752 - /* Clear the lock early before calling skb_tstamp_tx so that 753 - * applications are not woken up before the lock bit is clear. We use 754 - * a copy of the skb pointer to ensure other threads can't change it 755 - * while we're notifying the stack. 756 - */ 757 679 adapter->ptp_tx_skb = NULL; 758 - clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); 759 680 760 681 /* Notify the stack and free the skb after we've unlocked */ 761 682 skb_tstamp_tx(skb, &shhwtstamps); ··· 757 690 } 758 691 759 692 /** 760 - * igc_ptp_tx_work 761 - * @work: pointer to work struct 693 + * igc_ptp_tx_tstamp_event 694 + * @adapter: board private structure 762 695 * 763 - * This work function polls the TSYNCTXCTL valid bit to determine when a 764 - * timestamp has been taken for the current stored skb. 696 + * Called when a TX timestamp interrupt happens to retrieve the 697 + * timestamp and send it up to the socket. 765 698 */ 766 - static void igc_ptp_tx_work(struct work_struct *work) 699 + void igc_ptp_tx_tstamp_event(struct igc_adapter *adapter) 767 700 { 768 - struct igc_adapter *adapter = container_of(work, struct igc_adapter, 769 - ptp_tx_work); 770 - struct igc_hw *hw = &adapter->hw; 771 - u32 tsynctxctl; 701 + unsigned long flags; 772 702 773 - if (!test_bit(__IGC_PTP_TX_IN_PROGRESS, &adapter->state)) 774 - return; 703 + spin_lock_irqsave(&adapter->ptp_tx_lock, flags); 775 704 776 - tsynctxctl = rd32(IGC_TSYNCTXCTL); 777 - if (WARN_ON_ONCE(!(tsynctxctl & IGC_TSYNCTXCTL_TXTT_0))) 778 - return; 705 + if (!adapter->ptp_tx_skb) 706 + goto unlock; 779 707 780 708 igc_ptp_tx_hwtstamp(adapter); 709 + 710 + unlock: 711 + spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags); 781 712 } 782 713 783 714 /** ··· 1024 959 return; 1025 960 } 1026 961 962 + spin_lock_init(&adapter->ptp_tx_lock); 1027 963 spin_lock_init(&adapter->tmreg_lock); 1028 - INIT_WORK(&adapter->ptp_tx_work, igc_ptp_tx_work); 1029 964 1030 965 adapter->tstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; 1031 966 adapter->tstamp_config.tx_type = HWTSTAMP_TX_OFF; ··· 1085 1020 if (!(adapter->ptp_flags & IGC_PTP_ENABLED)) 1086 1021 return; 1087 1022 1088 - cancel_work_sync(&adapter->ptp_tx_work); 1089 - dev_kfree_skb_any(adapter->ptp_tx_skb); 1090 - adapter->ptp_tx_skb = NULL; 1091 - clear_bit_unlock(__IGC_PTP_TX_IN_PROGRESS, &adapter->state); 1023 + igc_ptp_clear_tx_tstamp(adapter); 1092 1024 1093 1025 if (pci_device_is_present(adapter->pdev)) { 1094 1026 igc_ptp_time_save(adapter);
+10 -3
drivers/net/ethernet/sfc/ef10.c
··· 1297 1297 { 1298 1298 struct efx_ef10_nic_data *nic_data = efx->nic_data; 1299 1299 1300 + spin_lock_bh(&efx->stats_lock); 1300 1301 kfree(nic_data->mc_stats); 1301 1302 nic_data->mc_stats = NULL; 1303 + spin_unlock_bh(&efx->stats_lock); 1302 1304 } 1303 1305 1304 1306 static int efx_ef10_init_nic(struct efx_nic *efx) ··· 1854 1852 1855 1853 efx_ef10_get_stat_mask(efx, mask); 1856 1854 1857 - efx_nic_copy_stats(efx, nic_data->mc_stats); 1858 - efx_nic_update_stats(efx_ef10_stat_desc, EF10_STAT_COUNT, 1859 - mask, stats, nic_data->mc_stats, false); 1855 + /* If NIC was fini'd (probably resetting), then we can't read 1856 + * updated stats right now. 1857 + */ 1858 + if (nic_data->mc_stats) { 1859 + efx_nic_copy_stats(efx, nic_data->mc_stats); 1860 + efx_nic_update_stats(efx_ef10_stat_desc, EF10_STAT_COUNT, 1861 + mask, stats, nic_data->mc_stats, false); 1862 + } 1860 1863 1861 1864 /* Update derived statistics */ 1862 1865 efx_nic_fix_nodesc_drop_stat(efx,
-6
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
··· 7461 7461 netif_carrier_off(ndev); 7462 7462 unregister_netdev(ndev); 7463 7463 7464 - /* Serdes power down needs to happen after VLAN filter 7465 - * is deleted that is triggered by unregister_netdev(). 7466 - */ 7467 - if (priv->plat->serdes_powerdown) 7468 - priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv); 7469 - 7470 7464 #ifdef CONFIG_DEBUG_FS 7471 7465 stmmac_exit_fs(ndev); 7472 7466 #endif
+5 -5
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
··· 2043 2043 goto cleanup_clk; 2044 2044 } 2045 2045 2046 + /* Reset core now that clocks are enabled, prior to accessing MDIO */ 2047 + ret = __axienet_device_reset(lp); 2048 + if (ret) 2049 + goto cleanup_clk; 2050 + 2046 2051 /* Autodetect the need for 64-bit DMA pointers. 2047 2052 * When the IP is configured for a bus width bigger than 32 bits, 2048 2053 * writing the MSB registers is mandatory, even if they are all 0. ··· 2101 2096 lp->coalesce_usec_rx = XAXIDMA_DFT_RX_USEC; 2102 2097 lp->coalesce_count_tx = XAXIDMA_DFT_TX_THRESHOLD; 2103 2098 lp->coalesce_usec_tx = XAXIDMA_DFT_TX_USEC; 2104 - 2105 - /* Reset core now that clocks are enabled, prior to accessing MDIO */ 2106 - ret = __axienet_device_reset(lp); 2107 - if (ret) 2108 - goto cleanup_clk; 2109 2099 2110 2100 ret = axienet_mdio_setup(lp); 2111 2101 if (ret)
+2
drivers/net/gtp.c
··· 631 631 gtp->sk1u = NULL; 632 632 udp_sk(sk)->encap_type = 0; 633 633 rcu_assign_sk_user_data(sk, NULL); 634 + release_sock(sk); 634 635 sock_put(sk); 636 + return; 635 637 } 636 638 release_sock(sk); 637 639 }
+6 -3
drivers/net/ipvlan/ipvlan_core.c
··· 584 584 consume_skb(skb); 585 585 return NET_XMIT_DROP; 586 586 } 587 - return ipvlan_rcv_frame(addr, &skb, true); 587 + ipvlan_rcv_frame(addr, &skb, true); 588 + return NET_XMIT_SUCCESS; 588 589 } 589 590 } 590 591 out: ··· 611 610 consume_skb(skb); 612 611 return NET_XMIT_DROP; 613 612 } 614 - return ipvlan_rcv_frame(addr, &skb, true); 613 + ipvlan_rcv_frame(addr, &skb, true); 614 + return NET_XMIT_SUCCESS; 615 615 } 616 616 } 617 617 skb = skb_share_check(skb, GFP_ATOMIC); ··· 624 622 * the skb for the main-dev. At the RX side we just return 625 623 * RX_PASS for it to be processed further on the stack. 626 624 */ 627 - return dev_forward_skb(ipvlan->phy_dev, skb); 625 + dev_forward_skb(ipvlan->phy_dev, skb); 626 + return NET_XMIT_SUCCESS; 628 627 629 628 } else if (is_multicast_ether_addr(eth->h_dest)) { 630 629 skb_reset_mac_header(skb);
+5 -18
drivers/net/phy/dp83td510.c
··· 12 12 13 13 /* MDIO_MMD_VEND2 registers */ 14 14 #define DP83TD510E_PHY_STS 0x10 15 + /* Bit 7 - mii_interrupt, active high. Clears on read. 16 + * Note: Clearing does not necessarily deactivate IRQ pin if interrupts pending. 17 + * This differs from the DP83TD510E datasheet (2020) which states this bit 18 + * clears on write 0. 19 + */ 15 20 #define DP83TD510E_STS_MII_INT BIT(7) 16 21 #define DP83TD510E_LINK_STATUS BIT(0) 17 22 ··· 58 53 int ret; 59 54 60 55 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { 61 - /* Clear any pending interrupts */ 62 - ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TD510E_PHY_STS, 63 - 0x0); 64 - if (ret) 65 - return ret; 66 - 67 56 ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, 68 57 DP83TD510E_INTERRUPT_REG_1, 69 58 DP83TD510E_INT1_LINK_EN); ··· 80 81 DP83TD510E_GENCFG_INT_EN); 81 82 if (ret) 82 83 return ret; 83 - 84 - /* Clear any pending interrupts */ 85 - ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TD510E_PHY_STS, 86 - 0x0); 87 84 } 88 85 89 86 return ret; ··· 88 93 static irqreturn_t dp83td510_handle_interrupt(struct phy_device *phydev) 89 94 { 90 95 int ret; 91 - 92 - ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, DP83TD510E_PHY_STS); 93 - if (ret < 0) { 94 - phy_error(phydev); 95 - return IRQ_NONE; 96 - } else if (!(ret & DP83TD510E_STS_MII_INT)) { 97 - return IRQ_NONE; 98 - } 99 96 100 97 /* Read the current enabled interrupts */ 101 98 ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, DP83TD510E_INTERRUPT_REG_1);
+1
drivers/net/usb/qmi_wwan.c
··· 1427 1427 {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */ 1428 1428 {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/ 1429 1429 {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */ 1430 + {QMI_QUIRK_SET_DTR(0x1546, 0x1312, 4)}, /* u-blox LARA-R6 01B */ 1430 1431 {QMI_QUIRK_SET_DTR(0x1546, 0x1342, 4)}, /* u-blox LARA-L6 */ 1431 1432 1432 1433 /* 4. Gobi 1000 devices */
+2 -2
include/linux/netfilter.h
··· 481 481 }; 482 482 extern const struct nfnl_ct_hook __rcu *nfnl_ct_hook; 483 483 484 - /** 484 + /* 485 485 * nf_skb_duplicated - TEE target has sent a packet 486 486 * 487 487 * When a xtables target sends a packet, the OUTPUT and POSTROUTING ··· 492 492 */ 493 493 DECLARE_PER_CPU(bool, nf_skb_duplicated); 494 494 495 - /** 495 + /* 496 496 * Contains bitmask of ctnetlink event subscribers, if any. 497 497 * Can't be pernet due to NETLINK_LISTEN_ALL_NSID setsockopt flag. 498 498 */
+10 -2
include/net/dsa.h
··· 314 314 struct list_head fdbs; 315 315 struct list_head mdbs; 316 316 317 - /* List of VLANs that CPU and DSA ports are members of. */ 318 317 struct mutex vlans_lock; 319 - struct list_head vlans; 318 + union { 319 + /* List of VLANs that CPU and DSA ports are members of. 320 + * Access to this is serialized by the sleepable @vlans_lock. 321 + */ 322 + struct list_head vlans; 323 + /* List of VLANs that user ports are members of. 324 + * Access to this is serialized by netif_addr_lock_bh(). 325 + */ 326 + struct list_head user_vlans; 327 + }; 320 328 }; 321 329 322 330 /* TODO: ideally DSA ports would have a single dp->link_dp member,
+1
include/net/sock.h
··· 2095 2095 } 2096 2096 2097 2097 kuid_t sock_i_uid(struct sock *sk); 2098 + unsigned long __sock_i_ino(struct sock *sk); 2098 2099 unsigned long sock_i_ino(struct sock *sk); 2099 2100 2100 2101 static inline kuid_t sock_net_uid(const struct net *net, const struct sock *sk)
+3 -1
lib/ts_bm.c
··· 60 60 struct ts_bm *bm = ts_config_priv(conf); 61 61 unsigned int i, text_len, consumed = state->offset; 62 62 const u8 *text; 63 - int shift = bm->patlen - 1, bs; 63 + int bs; 64 64 const u8 icase = conf->flags & TS_IGNORECASE; 65 65 66 66 for (;;) { 67 + int shift = bm->patlen - 1; 68 + 67 69 text_len = conf->get_next_block(consumed, &text, conf, state); 68 70 69 71 if (unlikely(text_len == 0))
+3 -2
net/can/isotp.c
··· 1112 1112 if (err) 1113 1113 goto err_event_drop; 1114 1114 1115 - if (sk->sk_err) 1116 - return -sk->sk_err; 1115 + err = sock_error(sk); 1116 + if (err) 1117 + return err; 1117 1118 } 1118 1119 1119 1120 return size;
+4 -4
net/core/rtnetlink.c
··· 4097 4097 ndm->ndm_ifindex = dev->ifindex; 4098 4098 ndm->ndm_state = ndm_state; 4099 4099 4100 - if (nla_put(skb, NDA_LLADDR, ETH_ALEN, addr)) 4100 + if (nla_put(skb, NDA_LLADDR, dev->addr_len, addr)) 4101 4101 goto nla_put_failure; 4102 4102 if (vid) 4103 4103 if (nla_put(skb, NDA_VLAN, sizeof(u16), &vid)) ··· 4111 4111 return -EMSGSIZE; 4112 4112 } 4113 4113 4114 - static inline size_t rtnl_fdb_nlmsg_size(void) 4114 + static inline size_t rtnl_fdb_nlmsg_size(const struct net_device *dev) 4115 4115 { 4116 4116 return NLMSG_ALIGN(sizeof(struct ndmsg)) + 4117 - nla_total_size(ETH_ALEN) + /* NDA_LLADDR */ 4117 + nla_total_size(dev->addr_len) + /* NDA_LLADDR */ 4118 4118 nla_total_size(sizeof(u16)) + /* NDA_VLAN */ 4119 4119 0; 4120 4120 } ··· 4126 4126 struct sk_buff *skb; 4127 4127 int err = -ENOBUFS; 4128 4128 4129 - skb = nlmsg_new(rtnl_fdb_nlmsg_size(), GFP_ATOMIC); 4129 + skb = nlmsg_new(rtnl_fdb_nlmsg_size(dev), GFP_ATOMIC); 4130 4130 if (!skb) 4131 4131 goto errout; 4132 4132
+14 -3
net/core/sock.c
··· 2598 2598 } 2599 2599 EXPORT_SYMBOL(sock_i_uid); 2600 2600 2601 + unsigned long __sock_i_ino(struct sock *sk) 2602 + { 2603 + unsigned long ino; 2604 + 2605 + read_lock(&sk->sk_callback_lock); 2606 + ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0; 2607 + read_unlock(&sk->sk_callback_lock); 2608 + return ino; 2609 + } 2610 + EXPORT_SYMBOL(__sock_i_ino); 2611 + 2601 2612 unsigned long sock_i_ino(struct sock *sk) 2602 2613 { 2603 2614 unsigned long ino; 2604 2615 2605 - read_lock_bh(&sk->sk_callback_lock); 2606 - ino = sk->sk_socket ? SOCK_INODE(sk->sk_socket)->i_ino : 0; 2607 - read_unlock_bh(&sk->sk_callback_lock); 2616 + local_bh_disable(); 2617 + ino = __sock_i_ino(sk); 2618 + local_bh_enable(); 2608 2619 return ino; 2609 2620 } 2610 2621 EXPORT_SYMBOL(sock_i_ino);
+1 -1
net/dsa/dsa.c
··· 1106 1106 mutex_init(&dp->vlans_lock); 1107 1107 INIT_LIST_HEAD(&dp->fdbs); 1108 1108 INIT_LIST_HEAD(&dp->mdbs); 1109 - INIT_LIST_HEAD(&dp->vlans); 1109 + INIT_LIST_HEAD(&dp->vlans); /* also initializes &dp->user_vlans */ 1110 1110 INIT_LIST_HEAD(&dp->list); 1111 1111 list_add_tail(&dp->list, &dst->ports); 1112 1112
+58 -26
net/dsa/slave.c
··· 27 27 #include "master.h" 28 28 #include "netlink.h" 29 29 #include "slave.h" 30 + #include "switch.h" 30 31 #include "tag.h" 31 32 32 33 struct dsa_switchdev_event_work { ··· 162 161 return 0; 163 162 } 164 163 165 - static int dsa_slave_host_vlan_rx_filtering(struct net_device *vdev, int vid, 166 - void *arg) 164 + static int dsa_slave_host_vlan_rx_filtering(void *arg, int vid) 167 165 { 168 166 struct dsa_host_vlan_rx_filtering_ctx *ctx = arg; 169 167 170 168 return dsa_slave_schedule_standalone_work(ctx->dev, ctx->event, 171 169 ctx->addr, vid); 170 + } 171 + 172 + static int dsa_slave_vlan_for_each(struct net_device *dev, 173 + int (*cb)(void *arg, int vid), void *arg) 174 + { 175 + struct dsa_port *dp = dsa_slave_to_port(dev); 176 + struct dsa_vlan *v; 177 + int err; 178 + 179 + lockdep_assert_held(&dev->addr_list_lock); 180 + 181 + err = cb(arg, 0); 182 + if (err) 183 + return err; 184 + 185 + list_for_each_entry(v, &dp->user_vlans, list) { 186 + err = cb(arg, v->vid); 187 + if (err) 188 + return err; 189 + } 190 + 191 + return 0; 172 192 } 173 193 174 194 static int dsa_slave_sync_uc(struct net_device *dev, ··· 202 180 .addr = addr, 203 181 .event = DSA_UC_ADD, 204 182 }; 205 - int err; 206 183 207 184 dev_uc_add(master, addr); 208 185 209 186 if (!dsa_switch_supports_uc_filtering(dp->ds)) 210 187 return 0; 211 188 212 - err = dsa_slave_schedule_standalone_work(dev, DSA_UC_ADD, addr, 0); 213 - if (err) 214 - return err; 215 - 216 - return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); 189 + return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, 190 + &ctx); 217 191 } 218 192 219 193 static int dsa_slave_unsync_uc(struct net_device *dev, ··· 222 204 .addr = addr, 223 205 .event = DSA_UC_DEL, 224 206 }; 225 - int err; 226 207 227 208 dev_uc_del(master, addr); 228 209 229 210 if (!dsa_switch_supports_uc_filtering(dp->ds)) 230 211 return 0; 231 212 232 - err = dsa_slave_schedule_standalone_work(dev, DSA_UC_DEL, addr, 0); 233 - if (err) 234 - return err; 235 - 236 - return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); 213 + return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, 214 + &ctx); 237 215 } 238 216 239 217 static int dsa_slave_sync_mc(struct net_device *dev, ··· 242 228 .addr = addr, 243 229 .event = DSA_MC_ADD, 244 230 }; 245 - int err; 246 231 247 232 dev_mc_add(master, addr); 248 233 249 234 if (!dsa_switch_supports_mc_filtering(dp->ds)) 250 235 return 0; 251 236 252 - err = dsa_slave_schedule_standalone_work(dev, DSA_MC_ADD, addr, 0); 253 - if (err) 254 - return err; 255 - 256 - return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); 237 + return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, 238 + &ctx); 257 239 } 258 240 259 241 static int dsa_slave_unsync_mc(struct net_device *dev, ··· 262 252 .addr = addr, 263 253 .event = DSA_MC_DEL, 264 254 }; 265 - int err; 266 255 267 256 dev_mc_del(master, addr); 268 257 269 258 if (!dsa_switch_supports_mc_filtering(dp->ds)) 270 259 return 0; 271 260 272 - err = dsa_slave_schedule_standalone_work(dev, DSA_MC_DEL, addr, 0); 273 - if (err) 274 - return err; 275 - 276 - return vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, &ctx); 261 + return dsa_slave_vlan_for_each(dev, dsa_slave_host_vlan_rx_filtering, 262 + &ctx); 277 263 } 278 264 279 265 void dsa_slave_sync_ha(struct net_device *dev) ··· 1765 1759 struct netlink_ext_ack extack = {0}; 1766 1760 struct dsa_switch *ds = dp->ds; 1767 1761 struct netdev_hw_addr *ha; 1762 + struct dsa_vlan *v; 1768 1763 int ret; 1769 1764 1770 1765 /* User port... */ ··· 1789 1782 !dsa_switch_supports_mc_filtering(ds)) 1790 1783 return 0; 1791 1784 1785 + v = kzalloc(sizeof(*v), GFP_KERNEL); 1786 + if (!v) { 1787 + ret = -ENOMEM; 1788 + goto rollback; 1789 + } 1790 + 1792 1791 netif_addr_lock_bh(dev); 1792 + 1793 + v->vid = vid; 1794 + list_add_tail(&v->list, &dp->user_vlans); 1793 1795 1794 1796 if (dsa_switch_supports_mc_filtering(ds)) { 1795 1797 netdev_for_each_synced_mc_addr(ha, dev) { ··· 1819 1803 dsa_flush_workqueue(); 1820 1804 1821 1805 return 0; 1806 + 1807 + rollback: 1808 + dsa_port_host_vlan_del(dp, &vlan); 1809 + dsa_port_vlan_del(dp, &vlan); 1810 + 1811 + return ret; 1822 1812 } 1823 1813 1824 1814 static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto, ··· 1838 1816 }; 1839 1817 struct dsa_switch *ds = dp->ds; 1840 1818 struct netdev_hw_addr *ha; 1819 + struct dsa_vlan *v; 1841 1820 int err; 1842 1821 1843 1822 err = dsa_port_vlan_del(dp, &vlan); ··· 1854 1831 return 0; 1855 1832 1856 1833 netif_addr_lock_bh(dev); 1834 + 1835 + v = dsa_vlan_find(&dp->user_vlans, &vlan); 1836 + if (!v) { 1837 + netif_addr_unlock_bh(dev); 1838 + return -ENOENT; 1839 + } 1840 + 1841 + list_del(&v->list); 1842 + kfree(v); 1857 1843 1858 1844 if (dsa_switch_supports_mc_filtering(ds)) { 1859 1845 netdev_for_each_synced_mc_addr(ha, dev) {
+2 -2
net/dsa/switch.c
··· 673 673 return false; 674 674 } 675 675 676 - static struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, 677 - const struct switchdev_obj_port_vlan *vlan) 676 + struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, 677 + const struct switchdev_obj_port_vlan *vlan) 678 678 { 679 679 struct dsa_vlan *v; 680 680
+3
net/dsa/switch.h
··· 111 111 bool operational; 112 112 }; 113 113 114 + struct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, 115 + const struct switchdev_obj_port_vlan *vlan); 116 + 114 117 int dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v); 115 118 int dsa_broadcast(unsigned long e, void *v); 116 119
+49 -3
net/netfilter/nf_conntrack_proto_dccp.c
··· 432 432 struct sk_buff *skb, unsigned int dataoff, 433 433 const struct nf_hook_state *state) 434 434 { 435 + static const unsigned long require_seq48 = 1 << DCCP_PKT_REQUEST | 436 + 1 << DCCP_PKT_RESPONSE | 437 + 1 << DCCP_PKT_CLOSEREQ | 438 + 1 << DCCP_PKT_CLOSE | 439 + 1 << DCCP_PKT_RESET | 440 + 1 << DCCP_PKT_SYNC | 441 + 1 << DCCP_PKT_SYNCACK; 435 442 unsigned int dccp_len = skb->len - dataoff; 436 443 unsigned int cscov; 437 444 const char *msg; 445 + u8 type; 446 + 447 + BUILD_BUG_ON(DCCP_PKT_INVALID >= BITS_PER_LONG); 438 448 439 449 if (dh->dccph_doff * 4 < sizeof(struct dccp_hdr) || 440 450 dh->dccph_doff * 4 > dccp_len) { ··· 469 459 goto out_invalid; 470 460 } 471 461 472 - if (dh->dccph_type >= DCCP_PKT_INVALID) { 462 + type = dh->dccph_type; 463 + if (type >= DCCP_PKT_INVALID) { 473 464 msg = "nf_ct_dccp: reserved packet type "; 474 465 goto out_invalid; 475 466 } 467 + 468 + if (test_bit(type, &require_seq48) && !dh->dccph_x) { 469 + msg = "nf_ct_dccp: type lacks 48bit sequence numbers"; 470 + goto out_invalid; 471 + } 472 + 476 473 return false; 477 474 out_invalid: 478 475 nf_l4proto_log_invalid(skb, state, IPPROTO_DCCP, "%s", msg); 479 476 return true; 477 + } 478 + 479 + struct nf_conntrack_dccp_buf { 480 + struct dccp_hdr dh; /* generic header part */ 481 + struct dccp_hdr_ext ext; /* optional depending dh->dccph_x */ 482 + union { /* depends on header type */ 483 + struct dccp_hdr_ack_bits ack; 484 + struct dccp_hdr_request req; 485 + struct dccp_hdr_response response; 486 + struct dccp_hdr_reset rst; 487 + } u; 488 + }; 489 + 490 + static struct dccp_hdr * 491 + dccp_header_pointer(const struct sk_buff *skb, int offset, const struct dccp_hdr *dh, 492 + struct nf_conntrack_dccp_buf *buf) 493 + { 494 + unsigned int hdrlen = __dccp_hdr_len(dh); 495 + 496 + if (hdrlen > sizeof(*buf)) 497 + return NULL; 498 + 499 + return skb_header_pointer(skb, offset, hdrlen, buf); 480 500 } 481 501 482 502 int nf_conntrack_dccp_packet(struct nf_conn *ct, struct sk_buff *skb, ··· 515 475 const struct nf_hook_state *state) 516 476 { 517 477 enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); 518 - struct dccp_hdr _dh, *dh; 478 + struct nf_conntrack_dccp_buf _dh; 519 479 u_int8_t type, old_state, new_state; 520 480 enum ct_dccp_roles role; 521 481 unsigned int *timeouts; 482 + struct dccp_hdr *dh; 522 483 523 - dh = skb_header_pointer(skb, dataoff, sizeof(_dh), &_dh); 484 + dh = skb_header_pointer(skb, dataoff, sizeof(*dh), &_dh.dh); 524 485 if (!dh) 525 486 return NF_DROP; 526 487 527 488 if (dccp_error(dh, skb, dataoff, state)) 528 489 return -NF_ACCEPT; 490 + 491 + /* pull again, including possible 48 bit sequences and subtype header */ 492 + dh = dccp_header_pointer(skb, dataoff, dh, &_dh); 493 + if (!dh) 494 + return NF_DROP; 529 495 530 496 type = dh->dccph_type; 531 497 if (!nf_ct_is_confirmed(ct) && !dccp_new(ct, skb, dh, state))
+1 -1
net/netfilter/nf_conntrack_sip.c
··· 611 611 start += strlen(name); 612 612 *val = simple_strtoul(start, &end, 0); 613 613 if (start == end) 614 - return 0; 614 + return -1; 615 615 if (matchoff && matchlen) { 616 616 *matchoff = start - dptr; 617 617 *matchlen = end - start;
+5 -1
net/netfilter/nf_tables_api.c
··· 5344 5344 nft_set_trans_unbind(ctx, set); 5345 5345 if (nft_set_is_anonymous(set)) 5346 5346 nft_deactivate_next(ctx->net, set); 5347 + else 5348 + list_del_rcu(&binding->list); 5347 5349 5348 5350 set->use--; 5349 5351 break; ··· 6797 6795 err_element_clash: 6798 6796 kfree(trans); 6799 6797 err_elem_free: 6800 - nft_set_elem_destroy(set, elem.priv, true); 6798 + nf_tables_set_elem_destroy(ctx, set, elem.priv); 6799 + if (obj) 6800 + obj->use--; 6801 6801 err_parse_data: 6802 6802 if (nla[NFTA_SET_ELEM_DATA] != NULL) 6803 6803 nft_data_release(&elem.data.val, desc.type);
+3 -2
net/netlink/af_netlink.c
··· 1600 1600 int netlink_set_err(struct sock *ssk, u32 portid, u32 group, int code) 1601 1601 { 1602 1602 struct netlink_set_err_data info; 1603 + unsigned long flags; 1603 1604 struct sock *sk; 1604 1605 int ret = 0; 1605 1606 ··· 1610 1609 /* sk->sk_err wants a positive error value */ 1611 1610 info.code = -code; 1612 1611 1613 - read_lock(&nl_table_lock); 1612 + read_lock_irqsave(&nl_table_lock, flags); 1614 1613 1615 1614 sk_for_each_bound(sk, &nl_table[ssk->sk_protocol].mc_list) 1616 1615 ret += do_one_set_err(sk, &info); 1617 1616 1618 - read_unlock(&nl_table_lock); 1617 + read_unlock_irqrestore(&nl_table_lock, flags); 1619 1618 return ret; 1620 1619 } 1621 1620 EXPORT_SYMBOL(netlink_set_err);
+4 -3
net/netlink/diag.c
··· 94 94 struct net *net = sock_net(skb->sk); 95 95 struct netlink_diag_req *req; 96 96 struct netlink_sock *nlsk; 97 + unsigned long flags; 97 98 struct sock *sk; 98 99 int num = 2; 99 100 int ret = 0; ··· 153 152 num++; 154 153 155 154 mc_list: 156 - read_lock(&nl_table_lock); 155 + read_lock_irqsave(&nl_table_lock, flags); 157 156 sk_for_each_bound(sk, &tbl->mc_list) { 158 157 if (sk_hashed(sk)) 159 158 continue; ··· 168 167 NETLINK_CB(cb->skb).portid, 169 168 cb->nlh->nlmsg_seq, 170 169 NLM_F_MULTI, 171 - sock_i_ino(sk)) < 0) { 170 + __sock_i_ino(sk)) < 0) { 172 171 ret = 1; 173 172 break; 174 173 } 175 174 num++; 176 175 } 177 - read_unlock(&nl_table_lock); 176 + read_unlock_irqrestore(&nl_table_lock, flags); 178 177 179 178 done: 180 179 cb->args[0] = num;
-1
net/nfc/llcp.h
··· 201 201 void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *s); 202 202 void nfc_llcp_socket_remote_param_init(struct nfc_llcp_sock *sock); 203 203 struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); 204 - struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local); 205 204 int nfc_llcp_local_put(struct nfc_llcp_local *local); 206 205 u8 nfc_llcp_get_sdp_ssap(struct nfc_llcp_local *local, 207 206 struct nfc_llcp_sock *sock);
+9 -3
net/nfc/llcp_commands.c
··· 359 359 struct sk_buff *skb; 360 360 struct nfc_llcp_local *local; 361 361 u16 size = 0; 362 + int err; 362 363 363 364 local = nfc_llcp_find_local(dev); 364 365 if (local == NULL) ··· 369 368 size += dev->tx_headroom + dev->tx_tailroom + NFC_HEADER_SIZE; 370 369 371 370 skb = alloc_skb(size, GFP_KERNEL); 372 - if (skb == NULL) 373 - return -ENOMEM; 371 + if (skb == NULL) { 372 + err = -ENOMEM; 373 + goto out; 374 + } 374 375 375 376 skb_reserve(skb, dev->tx_headroom + NFC_HEADER_SIZE); 376 377 ··· 382 379 383 380 nfc_llcp_send_to_raw_sock(local, skb, NFC_DIRECTION_TX); 384 381 385 - return nfc_data_exchange(dev, local->target_idx, skb, 382 + err = nfc_data_exchange(dev, local->target_idx, skb, 386 383 nfc_llcp_recv, local); 384 + out: 385 + nfc_llcp_local_put(local); 386 + return err; 387 387 } 388 388 389 389 int nfc_llcp_send_connect(struct nfc_llcp_sock *sock)
+43 -8
net/nfc/llcp_core.c
··· 17 17 static u8 llcp_magic[3] = {0x46, 0x66, 0x6d}; 18 18 19 19 static LIST_HEAD(llcp_devices); 20 + /* Protects llcp_devices list */ 21 + static DEFINE_SPINLOCK(llcp_devices_lock); 20 22 21 23 static void nfc_llcp_rx_skb(struct nfc_llcp_local *local, struct sk_buff *skb); 22 24 ··· 143 141 write_unlock(&local->raw_sockets.lock); 144 142 } 145 143 146 - struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) 144 + static struct nfc_llcp_local *nfc_llcp_local_get(struct nfc_llcp_local *local) 147 145 { 148 146 kref_get(&local->ref); 149 147 ··· 171 169 172 170 local = container_of(ref, struct nfc_llcp_local, ref); 173 171 174 - list_del(&local->list); 175 172 local_cleanup(local); 176 173 kfree(local); 177 174 } ··· 283 282 struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev) 284 283 { 285 284 struct nfc_llcp_local *local; 285 + struct nfc_llcp_local *res = NULL; 286 286 287 + spin_lock(&llcp_devices_lock); 287 288 list_for_each_entry(local, &llcp_devices, list) 288 - if (local->dev == dev) 289 - return local; 289 + if (local->dev == dev) { 290 + res = nfc_llcp_local_get(local); 291 + break; 292 + } 293 + spin_unlock(&llcp_devices_lock); 290 294 291 - pr_debug("No device found\n"); 295 + return res; 296 + } 297 + 298 + static struct nfc_llcp_local *nfc_llcp_remove_local(struct nfc_dev *dev) 299 + { 300 + struct nfc_llcp_local *local, *tmp; 301 + 302 + spin_lock(&llcp_devices_lock); 303 + list_for_each_entry_safe(local, tmp, &llcp_devices, list) 304 + if (local->dev == dev) { 305 + list_del(&local->list); 306 + spin_unlock(&llcp_devices_lock); 307 + return local; 308 + } 309 + spin_unlock(&llcp_devices_lock); 310 + 311 + pr_warn("Shutting down device not found\n"); 292 312 293 313 return NULL; 294 314 } ··· 630 608 631 609 *general_bytes_len = local->gb_len; 632 610 611 + nfc_llcp_local_put(local); 612 + 633 613 return local->gb; 634 614 } 635 615 636 616 int nfc_llcp_set_remote_gb(struct nfc_dev *dev, const u8 *gb, u8 gb_len) 637 617 { 638 618 struct nfc_llcp_local *local; 619 + int err; 639 620 640 621 if (gb_len < 3 || gb_len > NFC_MAX_GT_LEN) 641 622 return -EINVAL; ··· 655 630 656 631 if (memcmp(local->remote_gb, llcp_magic, 3)) { 657 632 pr_err("MAC does not support LLCP\n"); 658 - return -EINVAL; 633 + err = -EINVAL; 634 + goto out; 659 635 } 660 636 661 - return nfc_llcp_parse_gb_tlv(local, 637 + err = nfc_llcp_parse_gb_tlv(local, 662 638 &local->remote_gb[3], 663 639 local->remote_gb_len - 3); 640 + out: 641 + nfc_llcp_local_put(local); 642 + return err; 664 643 } 665 644 666 645 static u8 nfc_llcp_dsap(const struct sk_buff *pdu) ··· 1546 1517 1547 1518 __nfc_llcp_recv(local, skb); 1548 1519 1520 + nfc_llcp_local_put(local); 1521 + 1549 1522 return 0; 1550 1523 } 1551 1524 ··· 1564 1533 1565 1534 /* Close and purge all existing sockets */ 1566 1535 nfc_llcp_socket_release(local, true, 0); 1536 + 1537 + nfc_llcp_local_put(local); 1567 1538 } 1568 1539 1569 1540 void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx, ··· 1591 1558 mod_timer(&local->link_timer, 1592 1559 jiffies + msecs_to_jiffies(local->remote_lto)); 1593 1560 } 1561 + 1562 + nfc_llcp_local_put(local); 1594 1563 } 1595 1564 1596 1565 int nfc_llcp_register_device(struct nfc_dev *ndev) ··· 1643 1608 1644 1609 void nfc_llcp_unregister_device(struct nfc_dev *dev) 1645 1610 { 1646 - struct nfc_llcp_local *local = nfc_llcp_find_local(dev); 1611 + struct nfc_llcp_local *local = nfc_llcp_remove_local(dev); 1647 1612 1648 1613 if (local == NULL) { 1649 1614 pr_debug("No such device\n");
+10 -8
net/nfc/llcp_sock.c
··· 99 99 } 100 100 101 101 llcp_sock->dev = dev; 102 - llcp_sock->local = nfc_llcp_local_get(local); 102 + llcp_sock->local = local; 103 103 llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; 104 104 llcp_sock->service_name_len = min_t(unsigned int, 105 105 llcp_addr.service_name_len, ··· 186 186 } 187 187 188 188 llcp_sock->dev = dev; 189 - llcp_sock->local = nfc_llcp_local_get(local); 189 + llcp_sock->local = local; 190 190 llcp_sock->nfc_protocol = llcp_addr.nfc_protocol; 191 191 192 192 nfc_llcp_sock_link(&local->raw_sockets, sk); ··· 696 696 if (dev->dep_link_up == false) { 697 697 ret = -ENOLINK; 698 698 device_unlock(&dev->dev); 699 - goto put_dev; 699 + goto sock_llcp_put_local; 700 700 } 701 701 device_unlock(&dev->dev); 702 702 703 703 if (local->rf_mode == NFC_RF_INITIATOR && 704 704 addr->target_idx != local->target_idx) { 705 705 ret = -ENOLINK; 706 - goto put_dev; 706 + goto sock_llcp_put_local; 707 707 } 708 708 709 709 llcp_sock->dev = dev; 710 - llcp_sock->local = nfc_llcp_local_get(local); 710 + llcp_sock->local = local; 711 711 llcp_sock->ssap = nfc_llcp_get_local_ssap(local); 712 712 if (llcp_sock->ssap == LLCP_SAP_MAX) { 713 713 ret = -ENOMEM; 714 - goto sock_llcp_put_local; 714 + goto sock_llcp_nullify; 715 715 } 716 716 717 717 llcp_sock->reserved_ssap = llcp_sock->ssap; ··· 757 757 sock_llcp_release: 758 758 nfc_llcp_put_ssap(local, llcp_sock->ssap); 759 759 760 - sock_llcp_put_local: 761 - nfc_llcp_local_put(llcp_sock->local); 760 + sock_llcp_nullify: 762 761 llcp_sock->local = NULL; 763 762 llcp_sock->dev = NULL; 763 + 764 + sock_llcp_put_local: 765 + nfc_llcp_local_put(local); 764 766 765 767 put_dev: 766 768 nfc_put_device(dev);
+15 -5
net/nfc/netlink.c
··· 1039 1039 msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); 1040 1040 if (!msg) { 1041 1041 rc = -ENOMEM; 1042 - goto exit; 1042 + goto put_local; 1043 1043 } 1044 1044 1045 1045 rc = nfc_genl_send_params(msg, local, info->snd_portid, info->snd_seq); 1046 + 1047 + put_local: 1048 + nfc_llcp_local_put(local); 1046 1049 1047 1050 exit: 1048 1051 device_unlock(&dev->dev); ··· 1108 1105 if (info->attrs[NFC_ATTR_LLC_PARAM_LTO]) { 1109 1106 if (dev->dep_link_up) { 1110 1107 rc = -EINPROGRESS; 1111 - goto exit; 1108 + goto put_local; 1112 1109 } 1113 1110 1114 1111 local->lto = nla_get_u8(info->attrs[NFC_ATTR_LLC_PARAM_LTO]); ··· 1119 1116 1120 1117 if (info->attrs[NFC_ATTR_LLC_PARAM_MIUX]) 1121 1118 local->miux = cpu_to_be16(miux); 1119 + 1120 + put_local: 1121 + nfc_llcp_local_put(local); 1122 1122 1123 1123 exit: 1124 1124 device_unlock(&dev->dev); ··· 1178 1172 1179 1173 if (rc != 0) { 1180 1174 rc = -EINVAL; 1181 - goto exit; 1175 + goto put_local; 1182 1176 } 1183 1177 1184 1178 if (!sdp_attrs[NFC_SDP_ATTR_URI]) ··· 1197 1191 sdreq = nfc_llcp_build_sdreq_tlv(tid, uri, uri_len); 1198 1192 if (sdreq == NULL) { 1199 1193 rc = -ENOMEM; 1200 - goto exit; 1194 + goto put_local; 1201 1195 } 1202 1196 1203 1197 tlvs_len += sdreq->tlv_len; ··· 1207 1201 1208 1202 if (hlist_empty(&sdreq_list)) { 1209 1203 rc = -EINVAL; 1210 - goto exit; 1204 + goto put_local; 1211 1205 } 1212 1206 1213 1207 rc = nfc_llcp_send_snl_sdreq(local, &sdreq_list, tlvs_len); 1208 + 1209 + put_local: 1210 + nfc_llcp_local_put(local); 1211 + 1214 1212 exit: 1215 1213 device_unlock(&dev->dev); 1216 1214
+1
net/nfc/nfc.h
··· 52 52 u8 *nfc_llcp_general_bytes(struct nfc_dev *dev, size_t *general_bytes_len); 53 53 int nfc_llcp_data_received(struct nfc_dev *dev, struct sk_buff *skb); 54 54 struct nfc_llcp_local *nfc_llcp_find_local(struct nfc_dev *dev); 55 + int nfc_llcp_local_put(struct nfc_llcp_local *local); 55 56 int __init nfc_llcp_init(void); 56 57 void nfc_llcp_exit(void); 57 58 void nfc_llcp_free_sdp_tlv(struct nfc_llcp_sdp_tlv *sdp);
+25 -34
net/sched/sch_netem.c
··· 774 774 * signed 16 bit values. 775 775 */ 776 776 777 - static int get_dist_table(struct Qdisc *sch, struct disttable **tbl, 778 - const struct nlattr *attr) 777 + static int get_dist_table(struct disttable **tbl, const struct nlattr *attr) 779 778 { 780 779 size_t n = nla_len(attr)/sizeof(__s16); 781 780 const __s16 *data = nla_data(attr); 782 - spinlock_t *root_lock; 783 781 struct disttable *d; 784 782 int i; 785 783 ··· 792 794 for (i = 0; i < n; i++) 793 795 d->table[i] = data[i]; 794 796 795 - root_lock = qdisc_root_sleeping_lock(sch); 796 - 797 - spin_lock_bh(root_lock); 798 - swap(*tbl, d); 799 - spin_unlock_bh(root_lock); 800 - 801 - dist_free(d); 797 + *tbl = d; 802 798 return 0; 803 799 } 804 800 ··· 949 957 { 950 958 struct netem_sched_data *q = qdisc_priv(sch); 951 959 struct nlattr *tb[TCA_NETEM_MAX + 1]; 960 + struct disttable *delay_dist = NULL; 961 + struct disttable *slot_dist = NULL; 952 962 struct tc_netem_qopt *qopt; 953 963 struct clgstate old_clg; 954 964 int old_loss_model = CLG_RANDOM; ··· 961 967 if (ret < 0) 962 968 return ret; 963 969 970 + if (tb[TCA_NETEM_DELAY_DIST]) { 971 + ret = get_dist_table(&delay_dist, tb[TCA_NETEM_DELAY_DIST]); 972 + if (ret) 973 + goto table_free; 974 + } 975 + 976 + if (tb[TCA_NETEM_SLOT_DIST]) { 977 + ret = get_dist_table(&slot_dist, tb[TCA_NETEM_SLOT_DIST]); 978 + if (ret) 979 + goto table_free; 980 + } 981 + 964 982 sch_tree_lock(sch); 965 983 /* backup q->clg and q->loss_model */ 966 984 old_clg = q->clg; ··· 982 976 ret = get_loss_clg(q, tb[TCA_NETEM_LOSS]); 983 977 if (ret) { 984 978 q->loss_model = old_loss_model; 979 + q->clg = old_clg; 985 980 goto unlock; 986 981 } 987 982 } else { 988 983 q->loss_model = CLG_RANDOM; 989 984 } 990 985 991 - if (tb[TCA_NETEM_DELAY_DIST]) { 992 - ret = get_dist_table(sch, &q->delay_dist, 993 - tb[TCA_NETEM_DELAY_DIST]); 994 - if (ret) 995 - goto get_table_failure; 996 - } 997 - 998 - if (tb[TCA_NETEM_SLOT_DIST]) { 999 - ret = get_dist_table(sch, &q->slot_dist, 1000 - tb[TCA_NETEM_SLOT_DIST]); 1001 - if (ret) 1002 - goto get_table_failure; 1003 - } 1004 - 986 + if (delay_dist) 987 + swap(q->delay_dist, delay_dist); 988 + if (slot_dist) 989 + swap(q->slot_dist, slot_dist); 1005 990 sch->limit = qopt->limit; 1006 991 1007 992 q->latency = PSCHED_TICKS2NS(qopt->latency); ··· 1042 1045 1043 1046 unlock: 1044 1047 sch_tree_unlock(sch); 1048 + 1049 + table_free: 1050 + dist_free(delay_dist); 1051 + dist_free(slot_dist); 1045 1052 return ret; 1046 - 1047 - get_table_failure: 1048 - /* recover clg and loss_model, in case of 1049 - * q->clg and q->loss_model were modified 1050 - * in get_loss_clg() 1051 - */ 1052 - q->clg = old_clg; 1053 - q->loss_model = old_loss_model; 1054 - 1055 - goto unlock; 1056 1053 } 1057 1054 1058 1055 static int netem_init(struct Qdisc *sch, struct nlattr *opt,
+1
tools/testing/selftests/net/rtnetlink.sh
··· 860 860 fi 861 861 862 862 # clean up any leftovers 863 + echo 0 > /sys/bus/netdevsim/del_device 863 864 $probed && rmmod netdevsim 864 865 865 866 if [ $ret -ne 0 ]; then