Message ID | 20240607175340.786bfb938803.I493bf8422e36be4454c08880a8d3703cea8e421a@changeid (mailing list archive) |
---|---|
State | Accepted |
Commit | 44180feaccf266d9b0b28cc4ceaac019817deb5c |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/sched: initialize noop_qdisc owner | expand |
On 6/7/24 17:53, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@intel.com> > > When the noop_qdisc owner isn't initialized, then it will be 0, > so packets will erroneously be regarded as having been subject > to recursion as long as only CPU 0 queues them. For non-SMP, > that's all packets, of course. This causes a change in what's > reported to userspace, normally noop_qdisc would drop packets > silently, but with this change the syscall returns -ENOBUFS if > RECVERR is also set on the socket. > > Fix this by initializing the owner field to -1, just like it > would be for dynamically allocated qdiscs by qdisc_alloc(). > > Fixes: 0f022d32c3ec ("net/sched: Fix mirred deadlock on device recursion") > Signed-off-by: Johannes Berg <johannes.berg@intel.com> I found this quite by luck. Please CC maintainers next time, and blamed patch authors :/ Believe it or not, I do not follow netdev@ traffic. Reviewed-by: Eric Dumazet <edumazet@google.com> Thanks.
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Fri, 7 Jun 2024 17:53:32 +0200 you wrote: > From: Johannes Berg <johannes.berg@intel.com> > > When the noop_qdisc owner isn't initialized, then it will be 0, > so packets will erroneously be regarded as having been subject > to recursion as long as only CPU 0 queues them. For non-SMP, > that's all packets, of course. This causes a change in what's > reported to userspace, normally noop_qdisc would drop packets > silently, but with this change the syscall returns -ENOBUFS if > RECVERR is also set on the socket. > > [...] Here is the summary with links: - net/sched: initialize noop_qdisc owner https://git.kernel.org/netdev/net/c/44180feaccf2 You are awesome, thank you!
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index d3f6006b563c..fb32984d7a16 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -673,6 +673,7 @@ struct Qdisc noop_qdisc = { .qlen = 0, .lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.skb_bad_txq.lock), }, + .owner = -1, }; EXPORT_SYMBOL(noop_qdisc);