All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	syzbot+f56a5c5eac2b28439810@syzkaller.appspotmail.com,
	Eric Dumazet <edumazet@google.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	Jason Wang <jasowang@redhat.com>,
	Jakub Kicinski <kuba@kernel.org>, Alva Lan <alvalan9@foxmail.com>
Subject: [PATCH 6.6 68/72] ptr_ring: do not block hard interrupts in ptr_ring_resize_multiple()
Date: Wed,  4 Feb 2026 15:41:11 +0100	[thread overview]
Message-ID: <20260204143848.106234102@linuxfoundation.org> (raw)
In-Reply-To: <20260204143845.603454952@linuxfoundation.org>

6.6-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Dumazet <edumazet@google.com>

[ Upstream commit a126061c80d5efb4baef4bcf346094139cd81df6 ]

Jakub added a lockdep_assert_no_hardirq() check in __page_pool_put_page()
to increase test coverage.

syzbot found a splat caused by hard irq blocking in
ptr_ring_resize_multiple() [1]

As current users of ptr_ring_resize_multiple() do not require
hard irqs being masked, replace it to only block BH.

Rename helpers to better reflect they are safe against BH only.

- ptr_ring_resize_multiple() to ptr_ring_resize_multiple_bh()
- skb_array_resize_multiple() to skb_array_resize_multiple_bh()

[1]

WARNING: CPU: 1 PID: 9150 at net/core/page_pool.c:709 __page_pool_put_page net/core/page_pool.c:709 [inline]
WARNING: CPU: 1 PID: 9150 at net/core/page_pool.c:709 page_pool_put_unrefed_netmem+0x157/0xa40 net/core/page_pool.c:780
Modules linked in:
CPU: 1 UID: 0 PID: 9150 Comm: syz.1.1052 Not tainted 6.11.0-rc3-syzkaller-00202-gf8669d7b5f5d #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
RIP: 0010:__page_pool_put_page net/core/page_pool.c:709 [inline]
RIP: 0010:page_pool_put_unrefed_netmem+0x157/0xa40 net/core/page_pool.c:780
Code: 74 0e e8 7c aa fb f7 eb 43 e8 75 aa fb f7 eb 3c 65 8b 1d 38 a8 6a 76 31 ff 89 de e8 a3 ae fb f7 85 db 74 0b e8 5a aa fb f7 90 <0f> 0b 90 eb 1d 65 8b 1d 15 a8 6a 76 31 ff 89 de e8 84 ae fb f7 85
RSP: 0018:ffffc9000bda6b58 EFLAGS: 00010083
RAX: ffffffff8997e523 RBX: 0000000000000000 RCX: 0000000000040000
RDX: ffffc9000fbd0000 RSI: 0000000000001842 RDI: 0000000000001843
RBP: 0000000000000000 R08: ffffffff8997df2c R09: 1ffffd40003a000d
R10: dffffc0000000000 R11: fffff940003a000e R12: ffffea0001d00040
R13: ffff88802e8a4000 R14: dffffc0000000000 R15: 00000000ffffffff
FS:  00007fb7aaf716c0(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fa15a0d4b72 CR3: 00000000561b0000 CR4: 00000000003506f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
 tun_ptr_free drivers/net/tun.c:617 [inline]
 __ptr_ring_swap_queue include/linux/ptr_ring.h:571 [inline]
 ptr_ring_resize_multiple_noprof include/linux/ptr_ring.h:643 [inline]
 tun_queue_resize drivers/net/tun.c:3694 [inline]
 tun_device_event+0xaaf/0x1080 drivers/net/tun.c:3714
 notifier_call_chain+0x19f/0x3e0 kernel/notifier.c:93
 call_netdevice_notifiers_extack net/core/dev.c:2032 [inline]
 call_netdevice_notifiers net/core/dev.c:2046 [inline]
 dev_change_tx_queue_len+0x158/0x2a0 net/core/dev.c:9024
 do_setlink+0xff6/0x41f0 net/core/rtnetlink.c:2923
 rtnl_setlink+0x40d/0x5a0 net/core/rtnetlink.c:3201
 rtnetlink_rcv_msg+0x73f/0xcf0 net/core/rtnetlink.c:6647
 netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2550

Fixes: ff4e538c8c3e ("page_pool: add a lockdep check for recycling in hardirq")
Reported-by: syzbot+f56a5c5eac2b28439810@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/netdev/671e10df.050a0220.2b8c0f.01cf.GAE@google.com/T/
Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20241217135121.326370-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ 2c321f3f70bc ("mm: change inlined allocation helpers to account at the call site")
  is not ported to Linux-6.6.y. So remove the suffix "_noprof". ]
Signed-off-by: Alva Lan <alvalan9@foxmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/net/tap.c         |    6 +++---
 drivers/net/tun.c         |    6 +++---
 include/linux/ptr_ring.h  |   17 ++++++++---------
 include/linux/skb_array.h |   14 ++++++++------
 net/sched/sch_generic.c   |    4 ++--
 5 files changed, 24 insertions(+), 23 deletions(-)

--- a/drivers/net/tap.c
+++ b/drivers/net/tap.c
@@ -1330,9 +1330,9 @@ int tap_queue_resize(struct tap_dev *tap
 	list_for_each_entry(q, &tap->queue_list, next)
 		rings[i++] = &q->ring;
 
-	ret = ptr_ring_resize_multiple(rings, n,
-				       dev->tx_queue_len, GFP_KERNEL,
-				       __skb_array_destroy_skb);
+	ret = ptr_ring_resize_multiple_bh(rings, n,
+					  dev->tx_queue_len, GFP_KERNEL,
+					  __skb_array_destroy_skb);
 
 	kfree(rings);
 	return ret;
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -3682,9 +3682,9 @@ static int tun_queue_resize(struct tun_s
 	list_for_each_entry(tfile, &tun->disabled, next)
 		rings[i++] = &tfile->tx_ring;
 
-	ret = ptr_ring_resize_multiple(rings, n,
-				       dev->tx_queue_len, GFP_KERNEL,
-				       tun_ptr_free);
+	ret = ptr_ring_resize_multiple_bh(rings, n,
+					  dev->tx_queue_len, GFP_KERNEL,
+					  tun_ptr_free);
 
 	kfree(rings);
 	return ret;
--- a/include/linux/ptr_ring.h
+++ b/include/linux/ptr_ring.h
@@ -613,15 +613,14 @@ static inline int ptr_ring_resize(struct
 /*
  * Note: producer lock is nested within consumer lock, so if you
  * resize you must make sure all uses nest correctly.
- * In particular if you consume ring in interrupt or BH context, you must
- * disable interrupts/BH when doing so.
+ * In particular if you consume ring in BH context, you must
+ * disable BH when doing so.
  */
-static inline int ptr_ring_resize_multiple(struct ptr_ring **rings,
-					   unsigned int nrings,
-					   int size,
-					   gfp_t gfp, void (*destroy)(void *))
+static inline int ptr_ring_resize_multiple_bh(struct ptr_ring **rings,
+						     unsigned int nrings,
+						     int size, gfp_t gfp,
+						     void (*destroy)(void *))
 {
-	unsigned long flags;
 	void ***queues;
 	int i;
 
@@ -636,12 +635,12 @@ static inline int ptr_ring_resize_multip
 	}
 
 	for (i = 0; i < nrings; ++i) {
-		spin_lock_irqsave(&(rings[i])->consumer_lock, flags);
+		spin_lock_bh(&(rings[i])->consumer_lock);
 		spin_lock(&(rings[i])->producer_lock);
 		queues[i] = __ptr_ring_swap_queue(rings[i], queues[i],
 						  size, gfp, destroy);
 		spin_unlock(&(rings[i])->producer_lock);
-		spin_unlock_irqrestore(&(rings[i])->consumer_lock, flags);
+		spin_unlock_bh(&(rings[i])->consumer_lock);
 	}
 
 	for (i = 0; i < nrings; ++i)
--- a/include/linux/skb_array.h
+++ b/include/linux/skb_array.h
@@ -198,16 +198,18 @@ static inline int skb_array_resize(struc
 	return ptr_ring_resize(&a->ring, size, gfp, __skb_array_destroy_skb);
 }
 
-static inline int skb_array_resize_multiple(struct skb_array **rings,
-					    int nrings, unsigned int size,
-					    gfp_t gfp)
+static inline int skb_array_resize_multiple_bh(struct skb_array **rings,
+						      int nrings,
+						      unsigned int size,
+						      gfp_t gfp)
 {
 	BUILD_BUG_ON(offsetof(struct skb_array, ring));
-	return ptr_ring_resize_multiple((struct ptr_ring **)rings,
-					nrings, size, gfp,
-					__skb_array_destroy_skb);
+	return ptr_ring_resize_multiple_bh((struct ptr_ring **)rings,
+					          nrings, size, gfp,
+					          __skb_array_destroy_skb);
 }
 
+
 static inline void skb_array_cleanup(struct skb_array *a)
 {
 	ptr_ring_cleanup(&a->ring, __skb_array_destroy_skb);
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -910,8 +910,8 @@ static int pfifo_fast_change_tx_queue_le
 		bands[prio] = q;
 	}
 
-	return skb_array_resize_multiple(bands, PFIFO_FAST_BANDS, new_len,
-					 GFP_KERNEL);
+	return skb_array_resize_multiple_bh(bands, PFIFO_FAST_BANDS, new_len,
+					    GFP_KERNEL);
 }
 
 struct Qdisc_ops pfifo_fast_ops __read_mostly = {



  parent reply	other threads:[~2026-02-04 15:22 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-04 14:40 [PATCH 6.6 00/72] 6.6.123-rc1 review Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 01/72] Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 02/72] net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 03/72] can: gs_usb: gs_usb_receive_bulk_callback(): fix error message Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 04/72] net: bcmasp: fix early exit leak with fixed phy Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 05/72] octeon_ep: Fix memory leak in octep_device_setup() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 06/72] bonding: annotate data-races around slave->last_rx Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 07/72] net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 08/72] ipv6: use the right ifindex when replying to icmpv6 from localhost Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 09/72] net: wwan: t7xx: fix potential skb->frags overflow in RX path Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 10/72] rocker: fix memory leak in rocker_world_port_post_fini() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 11/72] nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame() Greg Kroah-Hartman
2026-02-04 14:40 ` [Intel-wired-lan] [PATCH 6.6 12/72] ice: stop counting UDP csum mismatch as rx_errors Greg Kroah-Hartman
2026-02-04 14:40   ` Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 13/72] net/mlx5e: TC, delete flows only for existing peers Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 14/72] net/mlx5e: Report rx_discards_phy via rx_dropped Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 15/72] net/mlx5e: Account for netdev stats in ndo_get_stats64 Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 16/72] nfc: nci: Fix race between rfkill and nci_unregister_device() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 17/72] net: bridge: fix static key check Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 18/72] net/mlx5e: Skip ESN replay window setup for IPsec crypto offload Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 19/72] scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 20/72] ASoC: Intel: sof_es8336: fix headphone GPIO logic inversion Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 21/72] gpiolib: acpi: use BIT_ULL() for u64 mask in address space handler Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 22/72] dma/pool: distinguish between missing and exhausted atomic pools Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 23/72] pinctrl: meson: mark the GPIO controller as sleeping Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 24/72] riscv: compat: fix COMPAT_UTS_MACHINE definition Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 25/72] rust: kbuild: give `--config-path` to `rustfmt` in `.rsi` target Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 26/72] ASoC: fsl: imx-card: Do not force slot width to sample width Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 27/72] scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 28/72] ASoC: amd: yc: Add DMI quirk for Acer TravelMate P216-41-TCO Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 29/72] gpio: pca953x: mask interrupts in irq shutdown Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 30/72] scsi: qla2xxx: edif: Fix dma_free_coherent() size Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 31/72] efivarfs: fix error propagation in efivar_entry_get() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 32/72] mptcp: only reset subflow errors when propagated Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 33/72] selftests: mptcp: check no dup close events after error Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 34/72] selftests: mptcp: check subflow errors in close events Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 35/72] selftests: mptcp: join: fix local endp not being tracked Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 36/72] flex_proportions: make fprop_new_period() hardirq safe Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 37/72] scripts: generate_rust_analyzer: Add compiler_builtins -> core dep Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 38/72] drm/imx/tve: fix probe device leak Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 39/72] drm/amdgpu/soc21: fix xclk for APUs Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 40/72] drm/amdgpu/gfx10: fix wptr reset in KGQ init Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 41/72] drm/amdgpu/gfx11: " Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 42/72] gpio: rockchip: Stop calling pinctrl for set_direction Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 43/72] mm/kfence: randomize the freelist on initialization Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 44/72] arm64/fpsimd: signal: Mandate SVE payload for streaming-mode state Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 45/72] arm64/fpsimd: signal: Consistently read FPSIMD context Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 46/72] arm64/fpsimd: signal: Fix restoration of SVE context Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 47/72] mei: trace: treat reg parameter as string Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 48/72] ksmbd: smbd: fix dma_unmap_sg() nents Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 49/72] drm/amdgpu: Replace Mutex with Spinlock for RLCG register access to avoid Priority Inversion in SRIOV Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 50/72] ksmbd: Fix race condition in RPC handle list access Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 51/72] wifi: mac80211: move TDLS work to wiphy work Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 52/72] wifi: ath11k: add srng->lock for ath11k_hal_srng_* in monitor mode Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 53/72] team: Move team device type change at the end of team_port_add Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 54/72] drm/radeon: delete radeon_fence_process in is_signaled, no deadlock Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 55/72] btrfs: prevent use-after-free on page private data in btrfs_subpage_clear_uptodate() Greg Kroah-Hartman
2026-02-04 14:40 ` [PATCH 6.6 56/72] net/sched: act_ife: convert comma to semicolon Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 57/72] ALSA: usb-audio: Fix missing unlock at error path of maxpacksize check Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 58/72] pinctrl: lpass-lpi: implement .get_direction() for the GPIO driver Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 59/72] drm/msm/a6xx: fix bogus hwcg register updates Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 60/72] perf: sched: Fix perf crash with new is_user_task() helper Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 61/72] writeback: fix 100% CPU usage when dirtytime_expire_interval is 0 Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 62/72] mptcp: avoid dup SUB_CLOSED events after disconnect Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 63/72] pinctrl: qcom: sm8350-lpass-lpi: Merge with SC7280 to fix I2S2 and SWR TX pins Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 64/72] drm/amdkfd: Dont use sw fault filter if retry cam enabled Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 65/72] drm/amdgpu: fix NULL pointer dereference in amdgpu_gmc_filter_faults_remove Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 66/72] xsk: Fix race condition in AF_XDP generic RX path Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 67/72] ksmbd: fix recursive locking in RPC handle list access Greg Kroah-Hartman
2026-02-04 14:41 ` Greg Kroah-Hartman [this message]
2026-02-04 14:41 ` [PATCH 6.6 69/72] drm/amd/display: use udelay rather than fsleep Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 70/72] Revert "net: Allow to use SMP threads for backlog NAPI." Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 71/72] Revert "net: Remove conditional threaded-NAPI wakeup based on task state." Greg Kroah-Hartman
2026-02-04 14:41 ` [PATCH 6.6 72/72] bpf/selftests: test_select_reuseport_kern: Remove unused header Greg Kroah-Hartman
2026-02-04 19:52 ` [PATCH 6.6 00/72] 6.6.123-rc1 review Brett A C Sheffield
2026-02-04 20:01 ` Florian Fainelli
2026-02-04 20:27 ` Jon Hunter
2026-02-04 22:49 ` Peter Schneider
2026-02-05  7:46 ` Ron Economos
2026-02-05  8:28 ` Francesco Dolcini
2026-02-05 11:39 ` Mark Brown
2026-02-06  5:54 ` Shung-Hsi Yu
2026-02-06  9:25 ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260204143848.106234102@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=alvalan9@foxmail.com \
    --cc=edumazet@google.com \
    --cc=jasowang@redhat.com \
    --cc=kuba@kernel.org \
    --cc=mst@redhat.com \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=syzbot+f56a5c5eac2b28439810@syzkaller.appspotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.