From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Bernard Pidoux <bernard.f6bvp@gmail.com>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.18 016/109] netrom: clear nr_neigh->ax25 under the routing lock in nr_link_failed()
Date: Wed, 28 Oct 2026 18:00:00 +0100 [thread overview]
Message-ID: <20261028165942.745132839@linuxfoundation.org> (raw)
In-Reply-To: <20261028165942.357251485@linuxfoundation.org>
6.18-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bernard Pidoux <bernard.f6bvp@gmail.com>
nr_route_frame() swaps nr_neigh->ax25 for the ax25_cb returned by
ax25_send_frame() and puts the old one while holding nr_route_lock.
nr_link_failed(), called by AX.25 when that link fails, looks the
neighbour up under the lock but then clears nr_neigh->ax25, puts the
ax25_cb and bumps nr_neigh->failed after dropping it. If a frame is
routed to the same neighbour at that moment, both paths can see the
same ax25_cb and put it twice.
Do the whole of nr_link_failed() in one critical section. The
neighbour no longer needs a temporary reference, since it cannot be
unlinked while the lock is held.
This depends on "netrom: use a single lock for the node and neighbour
lists".
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Bernard Pidoux <bernard.f6bvp@gmail.com>
(cherry picked from commit 6e6f80bff5c901f317c3750cdf375766800ecc1a)
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
net/netrom/nr_route.c | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/net/netrom/nr_route.c b/net/netrom/nr_route.c
index 67d9ed0006b40..98ba317ada637 100644
--- a/net/netrom/nr_route.c
+++ b/net/netrom/nr_route.c
@@ -715,34 +715,35 @@ void nr_link_failed(ax25_cb *ax25, int reason)
struct nr_neigh *s, *nr_neigh = NULL;
struct nr_node *nr_node = NULL;
+ /*
+ * nr_route_frame() replaces nr_neigh->ax25 under nr_route_lock;
+ * clear it and drop its reference under the same lock, so that the
+ * two paths cannot both put the same ax25_cb.
+ */
spin_lock_bh(&nr_route_lock);
nr_neigh_for_each(s, &nr_neigh_list) {
if (s->ax25 == ax25) {
- nr_neigh_hold(s);
nr_neigh = s;
break;
}
}
- spin_unlock_bh(&nr_route_lock);
if (nr_neigh == NULL)
- return;
+ goto out;
nr_neigh->ax25 = NULL;
ax25_cb_put(ax25);
- if (++nr_neigh->failed < READ_ONCE(sysctl_netrom_link_fails_count)) {
- nr_neigh_put(nr_neigh);
- return;
- }
- spin_lock_bh(&nr_route_lock);
+ if (++nr_neigh->failed < READ_ONCE(sysctl_netrom_link_fails_count))
+ goto out;
+
nr_node_for_each(nr_node, &nr_node_list) {
if (nr_node->which < nr_node->count &&
nr_node->routes[nr_node->which].neighbour == nr_neigh)
nr_node->which++;
}
+out:
spin_unlock_bh(&nr_route_lock);
- nr_neigh_put(nr_neigh);
}
/*
--
2.53.0
next prev parent reply other threads:[~2026-10-28 17:46 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 16:59 [PATCH 6.18 000/109] 6.18.60-rc1 review Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 001/109] eventfs: fix SRCU read lock leak in eventfs_iterate() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 002/109] ACPI: scan: Register platform devices for fixed event buttons Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 003/109] ice: fix rxq info registering in mbuf packets Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 004/109] ice: change XDP RxQ frag_size from DMA write length to xdp.frame_sz Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 005/109] rose: clear stale N(R)/N(S) before (re)transmitting a data frame Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 006/109] netrom: linearize and validate lengths in nr_rx_frame() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 007/109] netrom: require full NET/ROM headers in nr_route_frame() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 008/109] net: netrom: validate source address in nr_find_socket() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 009/109] netrom: bound fragment reassembly in nr_queue_rx_frame() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 010/109] ax25: fix OOB read after address header strip in ax25_rcv() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 011/109] ax25: check frame length in ax25_decode() and ax25_rx_iframe() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 012/109] net: ax25: fix integer overflow in ax25_rx_fragment() Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 013/109] netrom: use a single lock for the node and neighbour lists Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 014/109] netrom: look up and update routes in one critical section Greg Kroah-Hartman
2026-10-28 16:59 ` [PATCH 6.18 015/109] netrom: fix reference count leak in nr_rt_device_down Greg Kroah-Hartman
2026-10-28 17:00 ` Greg Kroah-Hartman [this message]
2026-10-28 17:00 ` [PATCH 6.18 017/109] netrom: fix nr_node leak when nr_del_node() removes the last route Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 018/109] rose: clear through routes when a neighbour is removed from the tables Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 019/109] rose: restart the link of a neighbour created over a live AX.25 connection Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 020/109] ax25: serialise the transmission of I frames on a connection Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 021/109] rose: process received frames and send with the socket locked Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 022/109] ax25: dont create two connections for the same link in ax25_send_frame() Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 023/109] ax25: read the connections ax25_dev only once when walking ax25_list Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 024/109] ax25: wait for ax25_send_frame() before detaching the connections of a device Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 025/109] ax25: dont accept frames on a device that is going down Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 026/109] ax25: send a private copy of each I frame Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 027/109] rose: clear the circuits of a neighbour that restarts the link Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 028/109] ax25: send unacknowledged I frames again when a link is re-established Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 029/109] rose: bring up the link of the preferred route passed over by a connect request Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 030/109] ax25: dont free an incoming SABM skb left on the listeners queue Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 031/109] block: avoid potential deadlock on zone revalidation failure Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 032/109] mm/damon/core: error damos_commit_quota_goal() for zero target_value Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 033/109] net_sched: codel: fix stale state for empty flows in fq_codel Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 034/109] Bluetooth: L2CAP: refuse __l2cap_chan_add if chan already has conn Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 035/109] tracing: Hold trace_types_lock when updating modules in persistent instances Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 036/109] tracing: Hold trace_types_lock when resetting last boot data from readers Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 037/109] tracing: Reject incomplete event filter expressions Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 038/109] tracing: Save the event file instead of the compatible histogram Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 039/109] tracing: Unregister field variable histograms when the command fails Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 040/109] tracing: Fix 64-bit and signed histogram fields on 32-bit kernels Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 041/109] tracing/histograms: Verify event_call identity when updating synth_event refcount Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 042/109] net: gso: limit recursive IP-in-IP segmentation Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 043/109] io-wq: order the exit bit against worker creation task work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 044/109] io_uring/waitid: own the request before clearing ->head Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 045/109] io_uring/cmd: dont leave list poison in ->hash_node Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 046/109] io_uring/wait: dont spin on a stuck overflow list Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 047/109] io_uring/io-wq: dont lose the signal that ends work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 048/109] io_uring/io-wq: dont hide a link from cancellations Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 049/109] io_uring: dont flood a cancelling task with task_work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 050/109] io_uring/io-wq: dont go to sleep on pending work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 051/109] io_uring/io-wq: dont strand work when a worker exits Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 052/109] io_uring/io-wq: dont exit with a creation pending Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 053/109] io_uring/io-wq: let cancel find picked up hashed work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 054/109] io_uring/poll: dont lose a cancel as io-wq arms poll Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 055/109] io_uring: dont lose a cancel as io-wq parks a request Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 056/109] io_uring/cancel: dont forget that the work was running Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 057/109] io_uring/cancel: recognize "no timeout" on 32-bit Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 058/109] io_uring/cancel: let CANCEL_ALL find parked requests Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 059/109] io_uring: wake ring pollers for local task_work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 060/109] io_uring/wait: look at all CQ waiters on wake up Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 061/109] io_uring/poll: drop stale double poll entry on rearm Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 062/109] io_uring/futex: allocate private hash before waiting Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 063/109] io_uring: drop the CQE cache if a refill fails Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 064/109] io_uring/register: dont wrap 32b CQEs when resizing Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 065/109] io_uring/register: handle index wrap " Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 066/109] io_uring/fdinfo: fix CQE dump of CQE32 rings Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 067/109] io_uring/timeout: dont skip over reached sequences Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 068/109] io_uring/timeout: keep repeat count on multishot update Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 069/109] io_uring/wait: no early -ETIME if min_wait finds work Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 070/109] io_uring/napi: make stale entries time out after 60s Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 071/109] io_uring/napi: dont busy poll past an expired timeout Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 072/109] io_uring/zcrx: fix buffer offsets in areas above 4GB Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 073/109] io_uring/kbuf: handle index wrap in last buffer check Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 074/109] io_uring/sqpoll: let the thread sleep on disabled rings Greg Kroah-Hartman
2026-10-28 17:00 ` [PATCH 6.18 075/109] io_uring/openclose: keep the lock in io_pipe_fixed() Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 076/109] io_uring: dont pass restart error codes to userspace Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 077/109] io_uring/net: dont retry recv on uncommitted buffers Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 078/109] io_uring/timeout: no ABS update of multishot timeouts Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 079/109] io_uring/timeout: dont end a linked timeout with 1 Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 080/109] io_uring: look up the file before queueing to io-wq Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 081/109] io_uring/poll: avoid retry wakeup loss when dropping ownership Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 082/109] io_uring/timeout: dont put a sequence target behind the last flush Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 083/109] io_uring/timeout: dont flush with the sequence " Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 084/109] io_uring/timeout: dont lose a cancel as io-wq arms a timeout Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 085/109] io_uring/poll: dont loop on HUP with multiple references Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 086/109] io_uring/net: keep recv buffer select length within MAX_RW_COUNT Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 087/109] io_uring/wait: wake real-time waiters from hard interrupt context Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 088/109] io_uring/waitid: prevent cancel reference wrap Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 089/109] io_uring: end the drain when the drain request completes Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 090/109] io_uring: keep the drain active when a deferred drain request is started Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 091/109] keys: Avoid the owner account dereference in named keyring lookup Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 092/109] keys: Check the authorization payload in process keyring searches Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 093/109] keys: Protect the type name while describing a key Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 094/109] keys: make keyring indexes independent of kernel addresses Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 095/109] keys: Protect the read method check against type removal Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 096/109] KEYS: Fix key_reject_and_link() race with keyring restriction Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 097/109] KEYS: trusted: Fix blob allocation size in tpm2_key_decode() Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 098/109] keys/trusted_keys: return immediately after TPM unseal failure Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 099/109] asymmetric_keys: reject trust keys without IDs Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 100/109] ftrace: Initialize modname and offset in print_rec() Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 101/109] coredump: hold RCU while releasing parked threads Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 102/109] signal: only SIGKILL and the freezers interrupt a coredumping task Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 103/109] signal: dont retarget shared signals in a dying thread group Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 104/109] ptrace: refuse to change the signal mask of a user worker Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 105/109] fork: release the files of a failed fork after sched_cancel_fork() Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 106/109] exit: hang up the tty before closing the files Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 107/109] pid_namespace: prevent TIF_NOTIFY_SIGNAL from interrupting the reaper Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 108/109] signal: allow taks to temporarily block TIF_NOTIFY_SIGNAL Greg Kroah-Hartman
2026-10-28 17:01 ` [PATCH 6.18 109/109] ACPI: scan: Avoid registering platform devices with resource overlaps Greg Kroah-Hartman
2026-10-28 19:39 ` [PATCH 6.18 000/109] 6.18.60-rc1 review Brett A C Sheffield
2026-10-29 3:09 ` Peter Schneider
2026-10-29 10:07 ` Pavel Machek
2026-10-29 13:43 ` Miguel Ojeda
2026-10-29 14:23 ` Ron Economos
2026-10-29 15:21 ` Shuah Khan
2026-10-29 16:29 ` Florian Fainelli
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=20261028165942.745132839@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=bernard.f6bvp@gmail.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox