-
Notifications
You must be signed in to change notification settings - Fork 12
[FIPS 9.2] net_sched: hfsc: Address reentrant enqueue adding class to eltree twice #514
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: fips-9-compliant/5.14.0-284.30.1
Are you sure you want to change the base?
[FIPS 9.2] net_sched: hfsc: Address reentrant enqueue adding class to eltree twice #514
Conversation
… qdisc jira VULN-68297 cve CVE-2025-37890 commit-author Victor Nogueira <[email protected]> commit 141d343 As described in Gerrard's report [1], we have a UAF case when an hfsc class has a netem child qdisc. The crux of the issue is that hfsc is assuming that checking for cl->qdisc->q.qlen == 0 guarantees that it hasn't inserted the class in the vttree or eltree (which is not true for the netem duplicate case). This patch checks the n_active class variable to make sure that the code won't insert the class in the vttree or eltree twice, catering for the reentrant case. [1] https://lore.kernel.org/netdev/CAHcdcOm+03OD2j6R0=YHKqmy=VgJ8xEOKuP6c7mSgnp-TEJJbw@mail.gmail.com/ Fixes: 37d9cf1 ("sched: Fix detection of empty queues in child qdiscs") Reported-by: Gerrard Tai <[email protected]> Acked-by: Jamal Hadi Salim <[email protected]> Signed-off-by: Victor Nogueira <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]> (cherry picked from commit 141d343) Signed-off-by: Marcin Wcisło <[email protected]>
jira VULN-68297 cve-bf CVE-2025-37890 commit-author Pedro Tammela <[email protected]> commit ac9fe7d Savino says: "We are writing to report that this recent patch (141d343) [1] can be bypassed, and a UAF can still occur when HFSC is utilized with NETEM. The patch only checks the cl->cl_nactive field to determine whether it is the first insertion or not [2], but this field is only incremented by init_vf [3]. By using HFSC_RSC (which uses init_ed) [4], it is possible to bypass the check and insert the class twice in the eltree. Under normal conditions, this would lead to an infinite loop in hfsc_dequeue for the reasons we already explained in this report [5]. However, if TBF is added as root qdisc and it is configured with a very low rate, it can be utilized to prevent packets from being dequeued. This behavior can be exploited to perform subsequent insertions in the HFSC eltree and cause a UAF." To fix both the UAF and the infinite loop, with netem as an hfsc child, check explicitly in hfsc_enqueue whether the class is already in the eltree whenever the HFSC_RSC flag is set. [1] https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=141d34391abbb315d68556b7c67ad97885407547 [2] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L1572 [3] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L677 [4] https://elixir.bootlin.com/linux/v6.15-rc5/source/net/sched/sch_hfsc.c#L1574 [5] https://lore.kernel.org/netdev/8DuRWwfqjoRDLDmBMlIfbrsZg9Gx50DHJc1ilxsEBNe2D6NMoigR_eIRIG0LOjMc3r10nUUZtArXx4oZBIdUfZQrwjcQhdinnMis_0G7VEk=@willsroot.io/T/#u Fixes: 37d9cf1 ("sched: Fix detection of empty queues in child qdiscs") Reported-by: Savino Dicanosa <[email protected]> Reported-by: William Liu <[email protected]> Acked-by: Jamal Hadi Salim <[email protected]> Tested-by: Victor Nogueira <[email protected]> Signed-off-by: Pedro Tammela <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]> (cherry picked from commit ac9fe7d) Signed-off-by: Marcin Wcisło <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🥌
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚤
Looks like the pushed solution for CVE-2025-37890 addresses also the CVE-2025-38001 I'm finding on my todo list https://www.cve.org/CVERecord?id=CVE-2025-38001
This commit was already included as the CVE-2025-37890 bugfix. I guess the message header of d7fd1e8 should be changed from
to
This would be then inconsistent though with 6228d81 for the LTS 9.2 which was already merged. I don't know if it matters or not. @PlaidCat? |
[FIPS 9.2]
CVE-2025-37890
VULN-68297
Problem
https://access.redhat.com/security/cve/CVE-2025-37890
Applicability: yes
The patch relates to the
sch_hfsc
module, enabled with theNET_SCH_HFSC
option. It's set tom
in all configs of FIPS 9.2:The commit 37d9cf1 marked as introducing the bug is present in
fips-9-compliant/5.14.0-284.30.1
's history. The mainline fix 141d343 is not present nor was it backported. For the full picture please refer to the "Appendix: Bug timeline" section in #510.Solution
The same situation as in #490, which see.
kABI check: passed
Boot test: passed
boot-test.log
Kselftests: passed relative
Coverage
Only the net-related tests were run.
net/forwarding
(exceptipip_hier_gre_keys.sh
,gre_inner_v6_multipath.sh
,sch_tbf_ets.sh
,mirror_gre_bridge_1d_vlan.sh
,mirror_gre_vlan_bridge_1q.sh
,sch_tbf_prio.sh
,bridge_igmp.sh
,sch_tbf_root.sh
,tc_actions.sh
,sch_ets.sh
,vxlan_bridge_1d_ipv6.sh
,sch_red.sh
,q_in_vni.sh
,dual_vxlan_bridge.sh
,tc_police.sh
),net/mptcp
(exceptmptcp_join.sh
,simult_flows.sh
,userspace_pm.sh
),net
(exceptip_defrag.sh
,txtimestamp.sh
,udpgro_fwd.sh
,fib_nexthops.sh
,gro.sh
,xfrm_policy.sh
,reuseport_addr_any.sh
,udpgso_bench.sh
),netfilter
(exceptnft_trans_stress.sh
)Reference
kselftests–fips9c–run1.log
kselftests–fips9c–run2.log
Patch
kselftests–fips9c-CVE-2025-37890–run1.log
kselftests–fips9c-CVE-2025-37890–run2.log
Comparison
The results for the reference and the patch are the same:
Specific tests: skipped