* [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge().
@ 2026-08-04 0:21 Kuniyuki Iwashima
2026-08-04 0:39 ` Kyle Zeng
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Kuniyuki Iwashima @ 2026-08-04 0:21 UTC (permalink / raw)
To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Cc: Simon Horman, Kuniyuki Iwashima, Kuniyuki Iwashima, netdev,
Kyle Zeng
Kyle Zeng reported that GC could free a dead SCC partially.
The scenario is as follows:
1) Create two SCCs:
X -. A <-> B
^--'
2) Run the following concurrently:
2-1) send() sk-B to sk-B from sk-X
2-2) close() both A and B
At 2-1), there is a small window where unix_add_edges()
publishes a new edge (B <-> B) to GC but its skb is not queued
by skb_queue_tail().
If 2-2) completes before skb_queue_tail() and GC is triggered,
it judges A <-> B as dead, but B is not freed because GC cannot
collect the not-yet-queued skb holding the B <-> B edge.
X -. A <-> B -. This edge is visible
^--' ^..' but skb is not
This itself is not a problem since the next GC run will judge
B as dead as well and free it finally.
X -. A <.> B -.
^--' ^--'
However, X's SCC forces the next GC to call unix_walk_scc_fast(),
and it iterates over A through B's scc_entry.
Let's unlink scc_entry before freeing the vertex in unix_del_edge().
Fixes: 4090fa373f0e ("af_unix: Replace garbage collection algorithm.")
Reported-by: Kyle Zeng <kylebot@openai.com>
Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
---
net/unix/garbage.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/net/unix/garbage.c b/net/unix/garbage.c
index 0783555e2526..9fcaaf55cba5 100644
--- a/net/unix/garbage.c
+++ b/net/unix/garbage.c
@@ -186,6 +186,7 @@ static void unix_del_edge(struct scm_fp_list *fpl, struct unix_edge *edge)
if (!vertex->out_degree) {
edge->predecessor->vertex = NULL;
list_move_tail(&vertex->entry, &fpl->vertices);
+ list_del(&vertex->scc_entry);
}
}
--
2.55.0.571.g244d577d93-goog
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-04 0:21 [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge() Kuniyuki Iwashima @ 2026-08-04 0:39 ` Kyle Zeng 2026-08-04 0:46 ` Kuniyuki Iwashima ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ messages in thread From: Kyle Zeng @ 2026-08-04 0:39 UTC (permalink / raw) To: Kuniyuki Iwashima Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, Simon Horman, Kuniyuki Iwashima, netdev On Tue, Aug 04, 2026 at 12:21:54AM +0000, Kuniyuki Iwashima wrote: > Kyle Zeng reported that GC could free a dead SCC partially. > > The scenario is as follows: > > 1) Create two SCCs: > > X -. A <-> B > ^--' > > 2) Run the following concurrently: > > 2-1) send() sk-B to sk-B from sk-X > 2-2) close() both A and B > > At 2-1), there is a small window where unix_add_edges() > publishes a new edge (B <-> B) to GC but its skb is not queued > by skb_queue_tail(). > > If 2-2) completes before skb_queue_tail() and GC is triggered, > it judges A <-> B as dead, but B is not freed because GC cannot > collect the not-yet-queued skb holding the B <-> B edge. > > X -. A <-> B -. This edge is visible > ^--' ^..' but skb is not > > This itself is not a problem since the next GC run will judge > B as dead as well and free it finally. > > X -. A <.> B -. > ^--' ^--' > > However, X's SCC forces the next GC to call unix_walk_scc_fast(), > and it iterates over A through B's scc_entry. > > Let's unlink scc_entry before freeing the vertex in unix_del_edge(). > > Fixes: 4090fa373f0e ("af_unix: Replace garbage collection algorithm.") > Reported-by: Kyle Zeng <kylebot@openai.com> > Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> > --- > net/unix/garbage.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/unix/garbage.c b/net/unix/garbage.c > index 0783555e2526..9fcaaf55cba5 100644 > --- a/net/unix/garbage.c > +++ b/net/unix/garbage.c > @@ -186,6 +186,7 @@ static void unix_del_edge(struct scm_fp_list *fpl, struct unix_edge *edge) > if (!vertex->out_degree) { > edge->predecessor->vertex = NULL; > list_move_tail(&vertex->entry, &fpl->vertices); > + list_del(&vertex->scc_entry); > } > } > > -- > 2.55.0.571.g244d577d93-goog > Reviewed-by: Kyle Zeng <kylebot@openai.com> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-04 0:21 [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge() Kuniyuki Iwashima 2026-08-04 0:39 ` Kyle Zeng @ 2026-08-04 0:46 ` Kuniyuki Iwashima 2026-08-04 21:16 ` Jakub Kicinski 2026-08-06 17:28 ` Jakub Kicinski 2026-08-06 19:10 ` patchwork-bot+netdevbpf 3 siblings, 1 reply; 10+ messages in thread From: Kuniyuki Iwashima @ 2026-08-04 0:46 UTC (permalink / raw) To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Simon Horman, Kuniyuki Iwashima, netdev, Kyle Zeng > [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). Sorry, this is for net.git. On Mon, Aug 3, 2026 at 5:21 PM Kuniyuki Iwashima <kuniyu@google.com> wrote: > > Kyle Zeng reported that GC could free a dead SCC partially. > > The scenario is as follows: > > 1) Create two SCCs: > > X -. A <-> B > ^--' > > 2) Run the following concurrently: > > 2-1) send() sk-B to sk-B from sk-X > 2-2) close() both A and B > > At 2-1), there is a small window where unix_add_edges() > publishes a new edge (B <-> B) to GC but its skb is not queued > by skb_queue_tail(). > > If 2-2) completes before skb_queue_tail() and GC is triggered, > it judges A <-> B as dead, but B is not freed because GC cannot > collect the not-yet-queued skb holding the B <-> B edge. > > X -. A <-> B -. This edge is visible > ^--' ^..' but skb is not > > This itself is not a problem since the next GC run will judge > B as dead as well and free it finally. > > X -. A <.> B -. > ^--' ^--' > > However, X's SCC forces the next GC to call unix_walk_scc_fast(), > and it iterates over A through B's scc_entry. > > Let's unlink scc_entry before freeing the vertex in unix_del_edge(). > > Fixes: 4090fa373f0e ("af_unix: Replace garbage collection algorithm.") > Reported-by: Kyle Zeng <kylebot@openai.com> > Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> > --- > net/unix/garbage.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/net/unix/garbage.c b/net/unix/garbage.c > index 0783555e2526..9fcaaf55cba5 100644 > --- a/net/unix/garbage.c > +++ b/net/unix/garbage.c > @@ -186,6 +186,7 @@ static void unix_del_edge(struct scm_fp_list *fpl, struct unix_edge *edge) > if (!vertex->out_degree) { > edge->predecessor->vertex = NULL; > list_move_tail(&vertex->entry, &fpl->vertices); > + list_del(&vertex->scc_entry); > } > } > > -- > 2.55.0.571.g244d577d93-goog > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-04 0:46 ` Kuniyuki Iwashima @ 2026-08-04 21:16 ` Jakub Kicinski 0 siblings, 0 replies; 10+ messages in thread From: Jakub Kicinski @ 2026-08-04 21:16 UTC (permalink / raw) To: Kuniyuki Iwashima Cc: David S. Miller, Eric Dumazet, Paolo Abeni, Simon Horman, Kuniyuki Iwashima, netdev, Kyle Zeng On Mon, 3 Aug 2026 17:46:37 -0700 Kuniyuki Iwashima wrote: > > [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). > > Sorry, this is for net.git. ack ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-04 0:21 [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge() Kuniyuki Iwashima 2026-08-04 0:39 ` Kyle Zeng 2026-08-04 0:46 ` Kuniyuki Iwashima @ 2026-08-06 17:28 ` Jakub Kicinski 2026-08-06 17:58 ` Kuniyuki Iwashima 2026-08-06 19:10 ` patchwork-bot+netdevbpf 3 siblings, 1 reply; 10+ messages in thread From: Jakub Kicinski @ 2026-08-06 17:28 UTC (permalink / raw) To: kuniyu Cc: Jakub Kicinski, davem, edumazet, pabeni, horms, kuni1840, netdev, kylebot This is an AI-generated review of your patch. The human sending this email says "I meant to send this yesterday, damn. This is completely separate right?" --- af_unix: Unlink scc_entry in unix_del_edge(). A vertex whose out_degree drops to zero is moved to fpl->vertices and later freed by unix_free_vertices(), but it stayed linked in the circular scc_entry list built by __unix_walk_scc(). This adds a list_del(&vertex->scc_entry) so a following unix_walk_scc_fast() no longer walks into the freed vertex. Reported-by: Kyle Zeng <kylebot@openai.com>, Fixes: 4090fa373f0e ("af_unix: Replace garbage collection algorithm."). Two questions below, one about the changelog wording and one about the cyclic SCC accounting that the described remnant vertex feeds into. > af_unix: Unlink scc_entry in unix_del_edge(). > > Kyle Zeng reported that GC could free a dead SCC partially. [ ... ] > However, X's SCC forces the next GC to call unix_walk_scc_fast(), > and it iterates over A through B's scc_entry. [Severity: Low] Could the changelog name what "iterates over A" means in practice? A's vertex has already been kfree()d by unix_free_vertices() at that point, so the fast walk reads and writes freed memory: net/unix/garbage.c:unix_scc_dead() { list_for_each_entry_reverse(vertex, scc, scc_entry) { /* Don't restart DFS from this vertex. */ list_move_tail(&vertex->entry, &unix_visited_vertices); ... } net/unix/garbage.c:unix_collect_skb() { list_for_each_entry_reverse(vertex, scc, scc_entry) { ... edge = list_first_entry(&vertex->edges, typeof(*edge), vertex_entry); ... } The summary says "GC could free a dead SCC partially", and the words use-after-free or list corruption do not appear anywhere in the message. Since the trigger is ordinary unprivileged sendmsg(SCM_RIGHTS) plus close() on AF_UNIX sockets, would it help stable triage to say explicitly that the pre-patch behaviour is a use-after-free on the freed unix_vertex? > This itself is not a problem since the next GC run will judge > B as dead as well and free it finally. > > X -. A <.> B -. > ^--' ^--' > diff --git a/net/unix/garbage.c b/net/unix/garbage.c > index 0783555e25266..9fcaaf55cba5d 100644 > --- a/net/unix/garbage.c > +++ b/net/unix/garbage.c > @@ -186,6 +186,7 @@ static void unix_del_edge(struct scm_fp_list *fpl, struct unix_edge *edge) > if (!vertex->out_degree) { > edge->predecessor->vertex = NULL; > list_move_tail(&vertex->entry, &fpl->vertices); > + list_del(&vertex->scc_entry); > } > } [Severity: High] This isn't a bug introduced by this patch, but the surviving remnant vertex that the changelog accepts as harmless looks like it unbalances unix_graph_cyclic_sccs. __unix_walk_scc() only counts SCCs that are still alive: net/unix/garbage.c:__unix_walk_scc() { if (unix_scc_dead(&scc, false)) { unix_collect_skb(&scc, hitlist); } else { ... if (unix_scc_cyclic(&scc)) cyclic_sccs++; } } so the {A, B} SCC that the full walk judges dead contributes 0. But the fast walk decrements once for every ring it finds dead: net/unix/garbage.c:unix_walk_scc_fast() { vertex = list_first_entry(&unix_unvisited_vertices, typeof(*vertex), entry); list_add(&scc, &vertex->scc_entry); if (unix_scc_dead(&scc, true)) { cyclic_sccs--; unix_collect_skb(&scc, hitlist); } ... WRITE_ONCE(unix_graph_cyclic_sccs, cyclic_sccs); WRITE_ONCE(unix_graph_state, cyclic_sccs ? UNIX_GRAPH_CYCLIC : UNIX_GRAPH_NOT_CYCLIC); } Using the exact scenario from the changelog, with X's live cyclic SCC plus {A, B}: the full walk collects {A, B} and stores unix_graph_cyclic_sccs = 1 for X. Because the purge runs with fpl->dead == true, unix_del_edge() deliberately skips unix_update_graph(), so B survives as a self-linked singleton ring back on unix_unvisited_vertices and the state stays UNIX_GRAPH_CYCLIC. The next GC then takes the fast walk, finds B's singleton ring dead and does cyclic_sccs-- on a group that was never counted, taking the counter 1 -> 0. Can that flip unix_graph_state to UNIX_GRAPH_NOT_CYCLIC while X's cyclic SCC is still present? After that, both entry points bail out: net/unix/garbage.c:unix_gc() { if (unix_graph_state == UNIX_GRAPH_NOT_CYCLIC) { spin_unlock(&unix_gc_lock); goto skip_gc; } } net/unix/garbage.c:unix_schedule_gc() { if (READ_ONCE(unix_graph_state) == UNIX_GRAPH_NOT_CYCLIC) return; } Closing X's fd does not release the socket while it is inflight, so nothing calls unix_del_edges()/unix_update_graph() to re-arm the state. Does that leak X's struct sock, its skb and the pinned struct file until some unrelated sender happens to pass an AF_UNIX fd to an inflight receiver? And if two such remnant rings are found in one fast walk while the counter is 1, does the second cyclic_sccs-- wrap the unsigned long to ULONG_MAX? The state would then stay UNIX_GRAPH_CYCLIC, so unix_walk_scc() is never selected again to recompute the counter, and this makes every fd-passing send take the synchronous path: net/unix/garbage.c:unix_schedule_gc() { if (user && READ_ONCE(unix_graph_cyclic_sccs)) flush_work(&unix_gc_work); } The counter and the unconditional decrement predate this patch (58b47c713711 and e29c7a4cec86), so this is not a regression from the one-line addition, but should the accounting also be corrected for the remnant case? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-06 17:28 ` Jakub Kicinski @ 2026-08-06 17:58 ` Kuniyuki Iwashima 2026-08-06 18:36 ` Jakub Kicinski 0 siblings, 1 reply; 10+ messages in thread From: Kuniyuki Iwashima @ 2026-08-06 17:58 UTC (permalink / raw) To: Jakub Kicinski; +Cc: davem, edumazet, pabeni, horms, kuni1840, netdev, kylebot On Thu, Aug 6, 2026 at 10:29 AM Jakub Kicinski <kuba@kernel.org> wrote: > > This is an AI-generated review of your patch. The human sending this > email says "I meant to send this yesterday, damn. This is completely > separate right?" > --- > af_unix: Unlink scc_entry in unix_del_edge(). > > A vertex whose out_degree drops to zero is moved to fpl->vertices and later > freed by unix_free_vertices(), but it stayed linked in the circular > scc_entry list built by __unix_walk_scc(). This adds a > list_del(&vertex->scc_entry) so a following unix_walk_scc_fast() no longer > walks into the freed vertex. Reported-by: Kyle Zeng <kylebot@openai.com>, > Fixes: 4090fa373f0e ("af_unix: Replace garbage collection algorithm."). > > Two questions below, one about the changelog wording and one about the > cyclic SCC accounting that the described remnant vertex feeds into. > > > af_unix: Unlink scc_entry in unix_del_edge(). > > > > Kyle Zeng reported that GC could free a dead SCC partially. > [ ... ] > > However, X's SCC forces the next GC to call unix_walk_scc_fast(), > > and it iterates over A through B's scc_entry. > > [Severity: Low] > Could the changelog name what "iterates over A" means in practice? A's > vertex has already been kfree()d by unix_free_vertices() at that point, so > the fast walk reads and writes freed memory: > > net/unix/garbage.c:unix_scc_dead() { > list_for_each_entry_reverse(vertex, scc, scc_entry) { > /* Don't restart DFS from this vertex. */ > list_move_tail(&vertex->entry, &unix_visited_vertices); > ... > } > > net/unix/garbage.c:unix_collect_skb() { > list_for_each_entry_reverse(vertex, scc, scc_entry) { > ... > edge = list_first_entry(&vertex->edges, typeof(*edge), vertex_entry); > ... > } > > The summary says "GC could free a dead SCC partially", and the words > use-after-free or list corruption do not appear anywhere in the message. > Since the trigger is ordinary unprivileged sendmsg(SCM_RIGHTS) plus close() > on AF_UNIX sockets, would it help stable triage to say explicitly that the > pre-patch behaviour is a use-after-free on the freed unix_vertex? > > > This itself is not a problem since the next GC run will judge > > B as dead as well and free it finally. > > > > X -. A <.> B -. > > ^--' ^--' > > > diff --git a/net/unix/garbage.c b/net/unix/garbage.c > > index 0783555e25266..9fcaaf55cba5d 100644 > > --- a/net/unix/garbage.c > > +++ b/net/unix/garbage.c > > @@ -186,6 +186,7 @@ static void unix_del_edge(struct scm_fp_list *fpl, struct unix_edge *edge) > > if (!vertex->out_degree) { > > edge->predecessor->vertex = NULL; > > list_move_tail(&vertex->entry, &fpl->vertices); > > + list_del(&vertex->scc_entry); > > } > > } > > [Severity: High] > This isn't a bug introduced by this patch, but the surviving remnant vertex > that the changelog accepts as harmless looks like it unbalances > unix_graph_cyclic_sccs. > > __unix_walk_scc() only counts SCCs that are still alive: > > net/unix/garbage.c:__unix_walk_scc() { > if (unix_scc_dead(&scc, false)) { > unix_collect_skb(&scc, hitlist); > } else { > ... > if (unix_scc_cyclic(&scc)) > cyclic_sccs++; > } > } > > so the {A, B} SCC that the full walk judges dead contributes 0. But the > fast walk decrements once for every ring it finds dead: > > net/unix/garbage.c:unix_walk_scc_fast() { > vertex = list_first_entry(&unix_unvisited_vertices, typeof(*vertex), entry); > list_add(&scc, &vertex->scc_entry); > > if (unix_scc_dead(&scc, true)) { > cyclic_sccs--; > unix_collect_skb(&scc, hitlist); > } > ... > WRITE_ONCE(unix_graph_cyclic_sccs, cyclic_sccs); > WRITE_ONCE(unix_graph_state, > cyclic_sccs ? UNIX_GRAPH_CYCLIC : UNIX_GRAPH_NOT_CYCLIC); > } > > Using the exact scenario from the changelog, with X's live cyclic SCC plus > {A, B}: the full walk collects {A, B} and stores unix_graph_cyclic_sccs = 1 > for X. Because the purge runs with fpl->dead == true, unix_del_edge() > deliberately skips unix_update_graph(), so B survives as a self-linked > singleton ring back on unix_unvisited_vertices and the state stays > UNIX_GRAPH_CYCLIC. > > The next GC then takes the fast walk, finds B's singleton ring dead and does > cyclic_sccs-- on a group that was never counted, taking the counter 1 -> 0. > > Can that flip unix_graph_state to UNIX_GRAPH_NOT_CYCLIC while X's cyclic SCC > is still present? After that, both entry points bail out: > > net/unix/garbage.c:unix_gc() { > if (unix_graph_state == UNIX_GRAPH_NOT_CYCLIC) { > spin_unlock(&unix_gc_lock); > goto skip_gc; > } > } > > net/unix/garbage.c:unix_schedule_gc() { > if (READ_ONCE(unix_graph_state) == UNIX_GRAPH_NOT_CYCLIC) > return; > } > > Closing X's fd does not release the socket while it is inflight, so nothing > calls unix_del_edges()/unix_update_graph() to re-arm the state. Does that > leak X's struct sock, its skb and the pinned struct file until some > unrelated sender happens to pass an AF_UNIX fd to an inflight receiver? > > And if two such remnant rings are found in one fast walk while the counter > is 1, does the second cyclic_sccs-- wrap the unsigned long to ULONG_MAX? > The state would then stay UNIX_GRAPH_CYCLIC, so unix_walk_scc() is never > selected again to recompute the counter, and this makes every fd-passing > send take the synchronous path: > > net/unix/garbage.c:unix_schedule_gc() { > if (user && READ_ONCE(unix_graph_cyclic_sccs)) > flush_work(&unix_gc_work); > } > > The counter and the unconditional decrement predate this patch (58b47c713711 > and e29c7a4cec86), so this is not a regression from the one-line addition, > but should the accounting also be corrected for the remnant case? Good point, looks like Claude is now better than Gemini :) I'll change unix_walk_scc_fast() like below. if (unix_scc_dead(&scc, true)) { unix_collect_skb(&scc, hitlist); if (list_empty(&scc)) cyclic_sccs--; } Thanks ! ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-06 17:58 ` Kuniyuki Iwashima @ 2026-08-06 18:36 ` Jakub Kicinski 2026-08-06 18:45 ` Kuniyuki Iwashima 0 siblings, 1 reply; 10+ messages in thread From: Jakub Kicinski @ 2026-08-06 18:36 UTC (permalink / raw) To: Kuniyuki Iwashima Cc: davem, edumazet, pabeni, horms, kuni1840, netdev, kylebot On Thu, 6 Aug 2026 10:58:56 -0700 Kuniyuki Iwashima wrote: > > This is an AI-generated review of your patch. The human sending this > > email says "I meant to send this yesterday, damn. This is completely > > separate right?" 👆️ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-06 18:36 ` Jakub Kicinski @ 2026-08-06 18:45 ` Kuniyuki Iwashima 2026-08-06 19:02 ` Jakub Kicinski 0 siblings, 1 reply; 10+ messages in thread From: Kuniyuki Iwashima @ 2026-08-06 18:45 UTC (permalink / raw) To: Jakub Kicinski; +Cc: davem, edumazet, pabeni, horms, kuni1840, netdev, kylebot On Thu, Aug 6, 2026 at 11:36 AM Jakub Kicinski <kuba@kernel.org> wrote: > > On Thu, 6 Aug 2026 10:58:56 -0700 Kuniyuki Iwashima wrote: > > > This is an AI-generated review of your patch. The human sending this > > > email says "I meant to send this yesterday, damn. This is completely > > > separate right?" > > 👆️ Ah missed this, yes, it's a separate one. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-06 18:45 ` Kuniyuki Iwashima @ 2026-08-06 19:02 ` Jakub Kicinski 0 siblings, 0 replies; 10+ messages in thread From: Jakub Kicinski @ 2026-08-06 19:02 UTC (permalink / raw) To: Kuniyuki Iwashima Cc: davem, edumazet, pabeni, horms, kuni1840, netdev, kylebot On Thu, 6 Aug 2026 11:45:19 -0700 Kuniyuki Iwashima wrote: > On Thu, Aug 6, 2026 at 11:36 AM Jakub Kicinski <kuba@kernel.org> wrote: > > > > On Thu, 6 Aug 2026 10:58:56 -0700 Kuniyuki Iwashima wrote: > > > > This is an AI-generated review of your patch. The human sending this > > > > email says "I meant to send this yesterday, damn. This is completely > > > > separate right?" > > > > 👆️ > > Ah missed this, yes, it's a separate one. Thanks :) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge(). 2026-08-04 0:21 [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge() Kuniyuki Iwashima ` (2 preceding siblings ...) 2026-08-06 17:28 ` Jakub Kicinski @ 2026-08-06 19:10 ` patchwork-bot+netdevbpf 3 siblings, 0 replies; 10+ messages in thread From: patchwork-bot+netdevbpf @ 2026-08-06 19:10 UTC (permalink / raw) To: Kuniyuki Iwashima Cc: davem, edumazet, kuba, pabeni, horms, kuni1840, netdev, kylebot Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Tue, 4 Aug 2026 00:21:54 +0000 you wrote: > Kyle Zeng reported that GC could free a dead SCC partially. > > The scenario is as follows: > > 1) Create two SCCs: > > X -. A <-> B > ^--' > > [...] Here is the summary with links: - [v1,net-next] af_unix: Unlink scc_entry in unix_del_edge(). https://git.kernel.org/netdev/net/c/594d90519502 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2026-08-06 19:10 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-08-04 0:21 [PATCH v1 net-next] af_unix: Unlink scc_entry in unix_del_edge() Kuniyuki Iwashima 2026-08-04 0:39 ` Kyle Zeng 2026-08-04 0:46 ` Kuniyuki Iwashima 2026-08-04 21:16 ` Jakub Kicinski 2026-08-06 17:28 ` Jakub Kicinski 2026-08-06 17:58 ` Kuniyuki Iwashima 2026-08-06 18:36 ` Jakub Kicinski 2026-08-06 18:45 ` Kuniyuki Iwashima 2026-08-06 19:02 ` Jakub Kicinski 2026-08-06 19:10 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox