Commit d20f6b3d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from Jakub Kicinski:
 "Including fixes from bluetooth and netfilter.

  Slim pickings this time, probably a combination of summer, DevConf.cz,
  and the end of first half of the year at corporations.

  Current release - regressions:

   - Revert "igc: fix a log entry using uninitialized netdev", it traded
     lack of netdev name in a printk() for a crash

  Previous releases - regressions:

   - Bluetooth: L2CAP: fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ

   - geneve: fix incorrectly setting lengths of inner headers in the
     skb, confusing the drivers and causing mangled packets

   - sched: initialize noop_qdisc owner to avoid false-positive
     recursion detection (recursing on CPU 0), which bubbles up to user
     space as a sendmsg() error, while noop_qdisc should silently drop

   - netdevsim: fix backwards compatibility in nsim_get_iflink()

  Previous releases - always broken:

   - netfilter: ipset: fix race between namespace cleanup and gc in the
     list:set type"

* tag 'net-6.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (35 commits)
  bnxt_en: Adjust logging of firmware messages in case of released token in __hwrm_send()
  af_unix: Read with MSG_PEEK loops if the first unread byte is OOB
  bnxt_en: Cap the size of HWRM_PORT_PHY_QCFG forwarded response
  gve: Clear napi->skb before dev_kfree_skb_any()
  ionic: fix use after netif_napi_del()
  Revert "igc: fix a log entry using uninitialized netdev"
  net: bridge: mst: fix suspicious rcu usage in br_mst_set_state
  net: bridge: mst: pass vlan group directly to br_mst_vlan_set_state
  net/ipv6: Fix the RT cache flush via sysctl using a previous delay
  net: stmmac: replace priv->speed with the portTransmitRate from the tc-cbs parameters
  gve: ignore nonrelevant GSO type bits when processing TSO headers
  net: pse-pd: Use EOPNOTSUPP error code instead of ENOTSUPP
  netfilter: Use flowlabel flow key when re-routing mangled packets
  netfilter: ipset: Fix race between namespace cleanup and gc in the list:set type
  netfilter: nft_inner: validate mandatory meta and payload
  tcp: use signed arithmetic in tcp_rtx_probe0_timed_out()
  mailmap: map Geliang's new email address
  mptcp: pm: update add_addr counters after connect
  mptcp: pm: inc RmAddr MIB counter once per RM_ADDR ID
  mptcp: ensure snd_una is properly initialized on connect
  ...
parents fd88e181 a9b97418
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ Geliang Tang <geliang@kernel.org> <geliang.tang@suse.com>
Geliang Tang <geliang@kernel.org> <geliangtang@xiaomi.com>
Geliang Tang <geliang@kernel.org> <geliangtang@gmail.com>
Geliang Tang <geliang@kernel.org> <geliangtang@163.com>
Geliang Tang <geliang@kernel.org> <tanggeliang@kylinos.cn>
Georgi Djakov <djakov@kernel.org> <georgi.djakov@linaro.org>
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <geraldsc@de.ibm.com>
Gerald Schaefer <gerald.schaefer@linux.ibm.com> <gerald.schaefer@de.ibm.com>
+10 −2
Original line number Diff line number Diff line
@@ -431,8 +431,11 @@ qca8k_parse_port_leds(struct qca8k_priv *priv, struct fwnode_handle *port, int p
		init_data.devicename = kasprintf(GFP_KERNEL, "%s:0%d",
						 priv->internal_mdio_bus->id,
						 port_num);
		if (!init_data.devicename)
		if (!init_data.devicename) {
			fwnode_handle_put(led);
			fwnode_handle_put(leds);
			return -ENOMEM;
		}

		ret = devm_led_classdev_register_ext(priv->dev, &port_led->cdev, &init_data);
		if (ret)
@@ -441,6 +444,7 @@ qca8k_parse_port_leds(struct qca8k_priv *priv, struct fwnode_handle *port, int p
		kfree(init_data.devicename);
	}

	fwnode_handle_put(leds);
	return 0;
}

@@ -471,9 +475,13 @@ qca8k_setup_led_ctrl(struct qca8k_priv *priv)
		 * the correct port for LED setup.
		 */
		ret = qca8k_parse_port_leds(priv, port, qca8k_port_to_phy(port_num));
		if (ret)
		if (ret) {
			fwnode_handle_put(port);
			fwnode_handle_put(ports);
			return ret;
		}
	}

	fwnode_handle_put(ports);
	return 0;
}
+51 −0
Original line number Diff line number Diff line
@@ -1434,6 +1434,57 @@ struct bnxt_l2_filter {
	atomic_t		refcnt;
};

/* Compat version of hwrm_port_phy_qcfg_output capped at 96 bytes.  The
 * first 95 bytes are identical to hwrm_port_phy_qcfg_output in bnxt_hsi.h.
 * The last valid byte in the compat version is different.
 */
struct hwrm_port_phy_qcfg_output_compat {
	__le16	error_code;
	__le16	req_type;
	__le16	seq_id;
	__le16	resp_len;
	u8	link;
	u8	active_fec_signal_mode;
	__le16	link_speed;
	u8	duplex_cfg;
	u8	pause;
	__le16	support_speeds;
	__le16	force_link_speed;
	u8	auto_mode;
	u8	auto_pause;
	__le16	auto_link_speed;
	__le16	auto_link_speed_mask;
	u8	wirespeed;
	u8	lpbk;
	u8	force_pause;
	u8	module_status;
	__le32	preemphasis;
	u8	phy_maj;
	u8	phy_min;
	u8	phy_bld;
	u8	phy_type;
	u8	media_type;
	u8	xcvr_pkg_type;
	u8	eee_config_phy_addr;
	u8	parallel_detect;
	__le16	link_partner_adv_speeds;
	u8	link_partner_adv_auto_mode;
	u8	link_partner_adv_pause;
	__le16	adv_eee_link_speed_mask;
	__le16	link_partner_adv_eee_link_speed_mask;
	__le32	xcvr_identifier_type_tx_lpi_timer;
	__le16	fec_cfg;
	u8	duplex_state;
	u8	option_flags;
	char	phy_vendor_name[16];
	char	phy_vendor_partnumber[16];
	__le16	support_pam4_speeds;
	__le16	force_pam4_link_speed;
	__le16	auto_pam4_link_speed_mask;
	u8	link_partner_pam4_adv_speeds;
	u8	valid;
};

struct bnxt_link_info {
	u8			phy_type;
	u8			media_type;
+1 −1
Original line number Diff line number Diff line
@@ -680,7 +680,7 @@ static int __hwrm_send(struct bnxt *bp, struct bnxt_hwrm_ctx *ctx)
			    req_type);
	else if (rc && rc != HWRM_ERR_CODE_PF_UNAVAILABLE)
		hwrm_err(bp, ctx, "hwrm req_type 0x%x seq id 0x%x error 0x%x\n",
			 req_type, token->seq_id, rc);
			 req_type, le16_to_cpu(ctx->req->seq_id), rc);
	rc = __hwrm_to_stderr(rc);
exit:
	if (token)
+10 −2
Original line number Diff line number Diff line
@@ -950,8 +950,11 @@ static int bnxt_hwrm_fwd_resp(struct bnxt *bp, struct bnxt_vf_info *vf,
	struct hwrm_fwd_resp_input *req;
	int rc;

	if (BNXT_FWD_RESP_SIZE_ERR(msg_size))
	if (BNXT_FWD_RESP_SIZE_ERR(msg_size)) {
		netdev_warn_once(bp->dev, "HWRM fwd response too big (%d bytes)\n",
				 msg_size);
		return -EINVAL;
	}

	rc = hwrm_req_init(bp, req, HWRM_FWD_RESP);
	if (!rc) {
@@ -1085,7 +1088,7 @@ static int bnxt_vf_set_link(struct bnxt *bp, struct bnxt_vf_info *vf)
		rc = bnxt_hwrm_exec_fwd_resp(
			bp, vf, sizeof(struct hwrm_port_phy_qcfg_input));
	} else {
		struct hwrm_port_phy_qcfg_output phy_qcfg_resp = {0};
		struct hwrm_port_phy_qcfg_output_compat phy_qcfg_resp = {};
		struct hwrm_port_phy_qcfg_input *phy_qcfg_req;

		phy_qcfg_req =
@@ -1096,6 +1099,11 @@ static int bnxt_vf_set_link(struct bnxt *bp, struct bnxt_vf_info *vf)
		mutex_unlock(&bp->link_lock);
		phy_qcfg_resp.resp_len = cpu_to_le16(sizeof(phy_qcfg_resp));
		phy_qcfg_resp.seq_id = phy_qcfg_req->seq_id;
		/* New SPEEDS2 fields are beyond the legacy structure, so
		 * clear the SPEEDS2_SUPPORTED flag.
		 */
		phy_qcfg_resp.option_flags &=
			~PORT_PHY_QCAPS_RESP_FLAGS2_SPEEDS2_SUPPORTED;
		phy_qcfg_resp.valid = 1;

		if (vf->flags & BNXT_VF_LINK_UP) {
Loading