Commit 33ea1340 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull networking fixes from Jakub Kicinski:
 "Including fixes from bluetooth and netfilter, no known blockers for
  the release.

  Current release - regressions:

   - wifi: mac80211: do not abuse fq.lock in ieee80211_do_stop(), fix
     taking the lock before its initialized

   - Bluetooth: mgmt: fix double free on error path

  Current release - new code bugs:

   - eth: ice: fix tunnel checksum offload with fragmented traffic

  Previous releases - regressions:

   - tcp: md5: fix IPv4-mapped support after refactoring, don't take the
     pure v6 path

   - Revert "tcp: change pingpong threshold to 3", improving detection
     of interactive sessions

   - mld: fix netdev refcount leak in mld_{query | report}_work() due to
     a race

   - Bluetooth:
      - always set event mask on suspend, avoid early wake ups
      - L2CAP: fix use-after-free caused by l2cap_chan_put

   - bridge: do not send empty IFLA_AF_SPEC attribute

  Previous releases - always broken:

   - ping6: fix memleak in ipv6_renew_options()

   - sctp: prevent null-deref caused by over-eager error paths

   - virtio-net: fix the race between refill work and close, resulting
     in NAPI scheduled after close and a BUG()

   - macsec:
      - fix three netlink parsing bugs
      - avoid breaking the device state on invalid change requests
      - fix a memleak in another error path

  Misc:

   - dt-bindings: net: ethernet-controller: rework 'fixed-link' schema

   - two more batches of sysctl data race adornment"

* tag 'net-5.19-final' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (67 commits)
  stmmac: dwmac-mediatek: fix resource leak in probe
  ipv6/addrconf: fix a null-ptr-deref bug for ip6_ptr
  net: ping6: Fix memleak in ipv6_renew_options().
  net/funeth: Fix fun_xdp_tx() and XDP packet reclaim
  sctp: leave the err path free in sctp_stream_init to sctp_stream_free
  sfc: disable softirqs for ptp TX
  ptp: ocp: Select CRC16 in the Kconfig.
  tcp: md5: fix IPv4-mapped support
  virtio-net: fix the race between refill work and close
  mptcp: Do not return EINPROGRESS when subflow creation succeeds
  Bluetooth: L2CAP: Fix use-after-free caused by l2cap_chan_put
  Bluetooth: Always set event mask on suspend
  Bluetooth: mgmt: Fix double free on error path
  wifi: mac80211: do not abuse fq.lock in ieee80211_do_stop()
  ice: do not setup vlan for loopback VSI
  ice: check (DD | EOF) bits on Rx descriptor rather than (EOP | RS)
  ice: Fix VSIs unable to share unicast MAC
  ice: Fix tunnel checksum offload with fragmented traffic
  ice: Fix max VLANs available for VF
  netfilter: nft_queue: only allow supported familes and hooks
  ...
parents e64ab2db 4d3d3a1b
Loading
Loading
Loading
Loading
+59 −64
Original line number Diff line number Diff line
@@ -167,10 +167,8 @@ properties:
      - in-band-status

  fixed-link:
    allOf:
      - if:
          type: array
        then:
    oneOf:
      - $ref: /schemas/types.yaml#/definitions/uint32-array
        deprecated: true
        items:
          - minimum: 0
@@ -196,11 +194,8 @@ properties:
            description:
              Asymmetric pause configuration. 0 for no asymmetric
              pause, 1 for asymmetric pause


      - if:
          type: object
        then:
      - type: object
        additionalProperties: false
        properties:
          speed:
            description:
+3 −0
Original line number Diff line number Diff line
@@ -183,6 +183,7 @@ properties:
      Should specify the gpio for phy reset.

  phy-reset-duration:
    $ref: /schemas/types.yaml#/definitions/uint32
    deprecated: true
    description:
      Reset duration in milliseconds.  Should present only if property
@@ -191,12 +192,14 @@ properties:
      and 1 millisecond will be used instead.

  phy-reset-active-high:
    type: boolean
    deprecated: true
    description:
      If present then the reset sequence using the GPIO specified in the
      "phy-reset-gpios" property is reversed (H=reset state, L=operation state).

  phy-reset-post-delay:
    $ref: /schemas/types.yaml#/definitions/uint32
    deprecated: true
    description:
      Post reset delay in milliseconds. If present then a delay of phy-reset-post-delay
+8 −1
Original line number Diff line number Diff line
@@ -2866,7 +2866,14 @@ sctp_rmem - vector of 3 INTEGERs: min, default, max
	Default: 4K

sctp_wmem  - vector of 3 INTEGERs: min, default, max
	Currently this tunable has no effect.
	Only the first value ("min") is used, "default" and "max" are
	ignored.

	min: Minimum size of send buffer that can be used by SCTP sockets.
	It is guaranteed to each SCTP socket (but not association) even
	under moderate memory pressure.

	Default: 4K

addr_scope_policy - INTEGER
	Control IPv4 address scoping - draft-stewart-tsvwg-sctp-ipv4-00
+4 −1
Original line number Diff line number Diff line
@@ -142,6 +142,7 @@ static void *fun_run_xdp(struct funeth_rxq *q, skb_frag_t *frags, void *buf_va,
			 int ref_ok, struct funeth_txq *xdp_q)
{
	struct bpf_prog *xdp_prog;
	struct xdp_frame *xdpf;
	struct xdp_buff xdp;
	u32 act;

@@ -163,7 +164,9 @@ static void *fun_run_xdp(struct funeth_rxq *q, skb_frag_t *frags, void *buf_va,
	case XDP_TX:
		if (unlikely(!ref_ok))
			goto pass;
		if (!fun_xdp_tx(xdp_q, xdp.data, xdp.data_end - xdp.data))

		xdpf = xdp_convert_buff_to_frame(&xdp);
		if (!xdpf || !fun_xdp_tx(xdp_q, xdpf))
			goto xdp_error;
		FUN_QSTAT_INC(q, xdp_tx);
		q->xdp_flush |= FUN_XDP_FLUSH_TX;
+9 −11
Original line number Diff line number Diff line
@@ -466,7 +466,7 @@ static unsigned int fun_xdpq_clean(struct funeth_txq *q, unsigned int budget)

		do {
			fun_xdp_unmap(q, reclaim_idx);
			page_frag_free(q->info[reclaim_idx].vaddr);
			xdp_return_frame(q->info[reclaim_idx].xdpf);

			trace_funeth_tx_free(q, reclaim_idx, 1, head);

@@ -479,11 +479,11 @@ static unsigned int fun_xdpq_clean(struct funeth_txq *q, unsigned int budget)
	return npkts;
}

bool fun_xdp_tx(struct funeth_txq *q, void *data, unsigned int len)
bool fun_xdp_tx(struct funeth_txq *q, struct xdp_frame *xdpf)
{
	struct fun_eth_tx_req *req;
	struct fun_dataop_gl *gle;
	unsigned int idx;
	unsigned int idx, len;
	dma_addr_t dma;

	if (fun_txq_avail(q) < FUN_XDP_CLEAN_THRES)
@@ -494,7 +494,8 @@ bool fun_xdp_tx(struct funeth_txq *q, void *data, unsigned int len)
		return false;
	}

	dma = dma_map_single(q->dma_dev, data, len, DMA_TO_DEVICE);
	len = xdpf->len;
	dma = dma_map_single(q->dma_dev, xdpf->data, len, DMA_TO_DEVICE);
	if (unlikely(dma_mapping_error(q->dma_dev, dma))) {
		FUN_QSTAT_INC(q, tx_map_err);
		return false;
@@ -514,7 +515,7 @@ bool fun_xdp_tx(struct funeth_txq *q, void *data, unsigned int len)
	gle = (struct fun_dataop_gl *)req->dataop.imm;
	fun_dataop_gl_init(gle, 0, 0, len, dma);

	q->info[idx].vaddr = data;
	q->info[idx].xdpf = xdpf;

	u64_stats_update_begin(&q->syncp);
	q->stats.tx_bytes += len;
@@ -545,12 +546,9 @@ int fun_xdp_xmit_frames(struct net_device *dev, int n,
	if (unlikely(q_idx >= fp->num_xdpqs))
		return -ENXIO;

	for (q = xdpqs[q_idx], i = 0; i < n; i++) {
		const struct xdp_frame *xdpf = frames[i];

		if (!fun_xdp_tx(q, xdpf->data, xdpf->len))
	for (q = xdpqs[q_idx], i = 0; i < n; i++)
		if (!fun_xdp_tx(q, frames[i]))
			break;
	}

	if (unlikely(flags & XDP_XMIT_FLUSH))
		fun_txq_wr_db(q);
@@ -577,7 +575,7 @@ static void fun_xdpq_purge(struct funeth_txq *q)
		unsigned int idx = q->cons_cnt & q->mask;

		fun_xdp_unmap(q, idx);
		page_frag_free(q->info[idx].vaddr);
		xdp_return_frame(q->info[idx].xdpf);
		q->cons_cnt++;
	}
}
Loading