From: Stephen Hemminger <stephen@networkplumber.org>
To: netdev@vger.kernel.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [PATCH 00/12] netem: fixes, cleanup, and selftest
Date: Fri, 13 Mar 2026 14:15:00 -0700 [thread overview]
Message-ID: <20260313211646.12549-1-stephen@networkplumber.org> (raw)
The netem packet scheduler is widely used for network emulation but
has not gotten enough of my attention lately.
The response to CVE-2024-45016 introduced check_netem_in_tree()
which was a clear regression. It rejected valid configurations
that have worked for over a decade -- HTB or HFSC trees with netem
leaves, including examples from our own documentation. A fix that
breaks existing users to paper over a bug that only occurred with
hostile misconfiguration should never have been merged.
Several approaches to undo the damage were discussed over
the past year but none landed, and in the meantime we've
accumulated four more CVE's and user bug reports.
The kernel management style doc says "the name of the game is to
avoid having to make a decision" and to "not get ushered into a
corner from which you cannot escape." Well, four CVE's and a pile
of user bug reports later, I'm in that corner. Time to decide.
I sat down with AI (Claude), reviewed the prior discussion, and
put together a working solution. While I was at it, I had it do
a deeper analysis of sch_netem.c which turned up several additional
bugs that have been lurking for years.
The series:
Patch 01: selftest covering basic ops, multi-netem trees,
inner qdisc combos, and crash-resistance scenarios
for the CVE topologies.
Patch 02: Revert the check_netem_in_tree() restriction.
Patch 03: Replace it with a per-CPU recursion guard -- the
approach that was discussed but dismissed prematurely.
Patch 04: Restructure dequeue to eliminate the re-entrancy path
that causes HFSC eltree corruption (CVE-2025-37890,
CVE-2025-38001).
Patch 05: Fix probability gaps in the 4-state loss model.
Patch 06: Fix slot delay calculation overflow for ranges > 2.1s.
Patch 07: Include reordered packets in the queue limit check.
Patch 08: Null-terminate the tfifo linear queue tail.
Patch 09: Only reseed PRNG when seed is explicitly provided.
Patch 10: Move state enums out of struct (cleanup).
Patch 11: Remove useless VERSION string.
Patch 12: Replace pr_info with netlink extack messages.
Patches 01-04 are the CVE-related fixes and should go to net.
Patches 05-09 are additional bug fixes.
Patches 10-12 are cleanup and could go to net-next if preferred.
Stephen Hemminger (12):
selftests: net: add netem qdisc test
Revert "net/sched: Restrict conditions for adding duplicating netems
to qdisc tree"
net/sched: netem: add per-CPU recursion guard for duplication
net/sched: netem: restructure dequeue to avoid re-entrancy with child
qdisc
net/sched: netem: fix probability gaps in 4-state loss model
net/sched: netem: fix slot delay calculation overflow
net/sched: netem: fix queue limit check to include reordered packets
net/sched: netem: null-terminate tfifo linear queue tail
net/sched: netem: only reseed PRNG when seed is explicitly provided
net/sched: netem: move state enums out of struct netem_sched_data
net/sched: netem: remove useless VERSION
net/sched: netem: replace pr_info with netlink extack error messages
MAINTAINERS | 1 +
net/sched/sch_netem.c | 219 ++++----
tools/testing/selftests/net/Makefile | 1 +
tools/testing/selftests/net/config | 3 +
tools/testing/selftests/net/netem.sh | 802 +++++++++++++++++++++++++++
5 files changed, 923 insertions(+), 103 deletions(-)
create mode 100755 tools/testing/selftests/net/netem.sh
--
2.51.0
next reply other threads:[~2026-03-13 21:16 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-13 21:15 Stephen Hemminger [this message]
2026-03-13 21:15 ` [PATCH 01/12] selftests: net: add netem qdisc test Stephen Hemminger
2026-03-13 21:15 ` [PATCH 02/12] Revert "net/sched: Restrict conditions for adding duplicating netems to qdisc tree" Stephen Hemminger
2026-03-13 21:15 ` [PATCH 03/12] net/sched: netem: add per-CPU recursion guard for duplication Stephen Hemminger
2026-03-14 19:29 ` William Liu
2026-03-15 16:06 ` Stephen Hemminger
2026-03-15 16:19 ` Jamal Hadi Salim
2026-03-15 17:18 ` Stephen Hemminger
2026-03-16 17:52 ` Jamal Hadi Salim
2026-03-13 21:15 ` [PATCH 04/12] net/sched: netem: restructure dequeue to avoid re-entrancy with child qdisc Stephen Hemminger
2026-03-13 21:15 ` [PATCH 05/12] net/sched: netem: fix probability gaps in 4-state loss model Stephen Hemminger
2026-03-13 21:15 ` [PATCH 06/12] net/sched: netem: fix slot delay calculation overflow Stephen Hemminger
2026-03-13 21:15 ` [PATCH 07/12] net/sched: netem: fix queue limit check to include reordered packets Stephen Hemminger
2026-03-13 21:15 ` [PATCH 08/12] net/sched: netem: null-terminate tfifo linear queue tail Stephen Hemminger
2026-03-13 21:15 ` [PATCH 09/12] net/sched: netem: only reseed PRNG when seed is explicitly provided Stephen Hemminger
2026-03-13 21:15 ` [PATCH 10/12] net/sched: netem: move state enums out of struct netem_sched_data Stephen Hemminger
2026-03-13 21:15 ` [PATCH 11/12] net/sched: netem: remove useless VERSION Stephen Hemminger
2026-03-13 21:15 ` [PATCH 12/12] net/sched: netem: replace pr_info with netlink extack error messages Stephen Hemminger
2026-03-14 14:09 ` [PATCH 00/12] netem: fixes, cleanup, and selftest Jakub Kicinski
2026-03-14 15:39 ` Stephen Hemminger
2026-03-14 15:51 ` Stephen Hemminger
2026-03-14 16:00 ` Jakub Kicinski
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=20260313211646.12549-1-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=netdev@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