Commit b949c21f authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from Jakub Kicinski:
 "Including fixes from can, xfrm, wifi, bluetooth, and netfilter.

  Lots of various size fixes, the length of the tag speaks for itself.
  Most of the 5.17-relevant stuff comes from xfrm, wifi and bt trees
  which had been lagging as you pointed out previously. But there's also
  a larger than we'd like portion of fixes for bugs from previous
  releases.

  Three more fixes still under discussion, including and xfrm revert for
  uAPI error.

  Current release - regressions:

   - iwlwifi: don't advertise TWT support, prevent FW crash

   - xfrm: fix the if_id check in changelink

   - xen/netfront: destroy queues before real_num_tx_queues is zeroed

   - bluetooth: fix not checking MGMT cmd pending queue, make scanning
     work again

  Current release - new code bugs:

   - mptcp: make SIOCOUTQ accurate for fallback socket

   - bluetooth: access skb->len after null check

   - bluetooth: hci_sync: fix not using conn_timeout

   - smc: fix cleanup when register ULP fails

   - dsa: restore error path of dsa_tree_change_tag_proto

   - iwlwifi: fix build error for IWLMEI

   - iwlwifi: mvm: propagate error from request_ownership to the user

  Previous releases - regressions:

   - xfrm: fix pMTU regression when reported pMTU is too small

   - xfrm: fix TCP MSS calculation when pMTU is close to 1280

   - bluetooth: fix bt_skb_sendmmsg not allocating partial chunks

   - ipv6: ensure we call ipv6_mc_down() at most once, prevent leaks

   - ipv6: prevent leaks in igmp6 when input queues get full

   - fix up skbs delta_truesize in UDP GRO frag_list

   - eth: e1000e: fix possible HW unit hang after an s0ix exit

   - eth: e1000e: correct NVM checksum verification flow

   - ptp: ocp: fix large time adjustments

  Previous releases - always broken:

   - tcp: make tcp_read_sock() more robust in presence of urgent data

   - xfrm: distinguishing SAs and SPs by if_id in xfrm_migrate

   - xfrm: fix xfrm_migrate issues when address family changes

   - dcb: flush lingering app table entries for unregistered devices

   - smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error

   - mac80211: fix EAPoL rekey fail in 802.3 rx path

   - mac80211: fix forwarded mesh frames AC & queue selection

   - netfilter: nf_queue: fix socket access races and bugs

   - batman-adv: fix ToCToU iflink problems and check the result belongs
     to the expected net namespace

   - can: gs_usb, etas_es58x: fix opened_channel_cnt's accounting

   - can: rcar_canfd: register the CAN device when fully ready

   - eth: igb, igc: phy: drop premature return leaking HW semaphore

   - eth: ixgbe: xsk: change !netif_carrier_ok() handling in
     ixgbe_xmit_zc(), prevent live lock when link goes down

   - eth: stmmac: only enable DMA interrupts when ready

   - eth: sparx5: move vlan checks before any changes are made

   - eth: iavf: fix races around init, removal, resets and vlan ops

   - ibmvnic: more reset flow fixes

  Misc:

   - eth: fix return value of __setup handlers"

* tag 'net-5.17-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (92 commits)
  ipv6: fix skb drops in igmp6_event_query() and igmp6_event_report()
  net: dsa: make dsa_tree_change_tag_proto actually unwind the tag proto change
  ixgbe: xsk: change !netif_carrier_ok() handling in ixgbe_xmit_zc()
  selftests: mlxsw: resource_scale: Fix return value
  selftests: mlxsw: tc_police_scale: Make test more robust
  net: dcb: disable softirqs in dcbnl_flush_dev()
  bnx2: Fix an error message
  sfc: extend the locking on mcdi->seqno
  net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error cause by server
  net/smc: fix unexpected SMC_CLC_DECL_ERR_REGRMB error generated by client
  net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()
  tcp: make tcp_read_sock() more robust
  bpf, sockmap: Do not ignore orig_len parameter
  net: ipa: add an interconnect dependency
  net: fix up skbs delta_truesize in UDP GRO frag_list
  iwlwifi: mvm: return value for request_ownership
  nl80211: Update bss channel on channel switch for P2P_CLIENT
  iwlwifi: fix build error for IWLMEI
  ptp: ocp: Add ptp_ocp_adjtime_coarse for large adjustments
  batman-adv: Don't expect inter-netns unique iflink indices
  ...
parents e58bd49d 2d3916f3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1676,6 +1676,8 @@ static int fs_init(struct fs_dev *dev)
	dev->hw_base = pci_resource_start(pci_dev, 0);

	dev->base = ioremap(dev->hw_base, 0x1000);
	if (!dev->base)
		return 1;

	reset_chip (dev);
  
+3 −0
Original line number Diff line number Diff line
@@ -138,6 +138,9 @@ static int com20020pci_probe(struct pci_dev *pdev,
		return -ENOMEM;

	ci = (struct com20020_pci_card_info *)id->driver_data;
	if (!ci)
		return -EINVAL;

	priv->ci = ci;
	mm = &ci->misc_map;

+3 −3
Original line number Diff line number Diff line
@@ -1715,15 +1715,15 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,

	netif_napi_add(ndev, &priv->napi, rcar_canfd_rx_poll,
		       RCANFD_NAPI_WEIGHT);
	spin_lock_init(&priv->tx_lock);
	devm_can_led_init(ndev);
	gpriv->ch[priv->channel] = priv;
	err = register_candev(ndev);
	if (err) {
		dev_err(&pdev->dev,
			"register_candev() failed, error %d\n", err);
		goto fail_candev;
	}
	spin_lock_init(&priv->tx_lock);
	devm_can_led_init(ndev);
	gpriv->ch[priv->channel] = priv;
	dev_info(&pdev->dev, "device registered (channel %u)\n", priv->channel);
	return 0;

+5 −4
Original line number Diff line number Diff line
@@ -1787,7 +1787,7 @@ static int es58x_open(struct net_device *netdev)
	struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev;
	int ret;

	if (atomic_inc_return(&es58x_dev->opened_channel_cnt) == 1) {
	if (!es58x_dev->opened_channel_cnt) {
		ret = es58x_alloc_rx_urbs(es58x_dev);
		if (ret)
			return ret;
@@ -1805,12 +1805,13 @@ static int es58x_open(struct net_device *netdev)
	if (ret)
		goto free_urbs;

	es58x_dev->opened_channel_cnt++;
	netif_start_queue(netdev);

	return ret;

 free_urbs:
	if (atomic_dec_and_test(&es58x_dev->opened_channel_cnt))
	if (!es58x_dev->opened_channel_cnt)
		es58x_free_urbs(es58x_dev);
	netdev_err(netdev, "%s: Could not open the network device: %pe\n",
		   __func__, ERR_PTR(ret));
@@ -1845,7 +1846,8 @@ static int es58x_stop(struct net_device *netdev)

	es58x_flush_pending_tx_msg(netdev);

	if (atomic_dec_and_test(&es58x_dev->opened_channel_cnt))
	es58x_dev->opened_channel_cnt--;
	if (!es58x_dev->opened_channel_cnt)
		es58x_free_urbs(es58x_dev);

	return 0;
@@ -2215,7 +2217,6 @@ static struct es58x_device *es58x_init_es58x_dev(struct usb_interface *intf,
	init_usb_anchor(&es58x_dev->tx_urbs_idle);
	init_usb_anchor(&es58x_dev->tx_urbs_busy);
	atomic_set(&es58x_dev->tx_urbs_idle_cnt, 0);
	atomic_set(&es58x_dev->opened_channel_cnt, 0);
	usb_set_intfdata(intf, es58x_dev);

	es58x_dev->rx_pipe = usb_rcvbulkpipe(es58x_dev->udev,
+5 −3
Original line number Diff line number Diff line
@@ -373,8 +373,6 @@ struct es58x_operators {
 *	queue wake/stop logic should prevent this URB from getting
 *	empty. Please refer to es58x_get_tx_urb() for more details.
 * @tx_urbs_idle_cnt: number of urbs in @tx_urbs_idle.
 * @opened_channel_cnt: number of channels opened (c.f. es58x_open()
 *	and es58x_stop()).
 * @ktime_req_ns: kernel timestamp when es58x_set_realtime_diff_ns()
 *	was called.
 * @realtime_diff_ns: difference in nanoseconds between the clocks of
@@ -384,6 +382,10 @@ struct es58x_operators {
 *	in RX branches.
 * @rx_max_packet_size: Maximum length of bulk-in URB.
 * @num_can_ch: Number of CAN channel (i.e. number of elements of @netdev).
 * @opened_channel_cnt: number of channels opened. Free of race
 *	conditions because its two users (net_device_ops:ndo_open()
 *	and net_device_ops:ndo_close()) guarantee that the network
 *	stack big kernel lock (a.k.a. rtnl_mutex) is being hold.
 * @rx_cmd_buf_len: Length of @rx_cmd_buf.
 * @rx_cmd_buf: The device might split the URB commands in an
 *	arbitrary amount of pieces. This buffer is used to concatenate
@@ -406,7 +408,6 @@ struct es58x_device {
	struct usb_anchor tx_urbs_busy;
	struct usb_anchor tx_urbs_idle;
	atomic_t tx_urbs_idle_cnt;
	atomic_t opened_channel_cnt;

	u64 ktime_req_ns;
	s64 realtime_diff_ns;
@@ -415,6 +416,7 @@ struct es58x_device {

	u16 rx_max_packet_size;
	u8 num_can_ch;
	u8 opened_channel_cnt;

	u16 rx_cmd_buf_len;
	union es58x_urb_cmd rx_cmd_buf;
Loading