Bug 1221554 (CVE-2021-47125)

Summary: VUL-0: CVE-2021-47125: kernel: sch_htb: fix refcount leak in htb_parent_to_leaf_offload
Product: [Novell Products] SUSE Security Incidents Reporter: SMASH SMASH <smash_bz>
Component: IncidentsAssignee: Security Team bot <security-team>
Status: RESOLVED FIXED QA Contact: Security Team bot <security-team>
Severity: Normal    
Priority: P3 - Medium CC: gabriele.sonnu, osalvador
Version: unspecified   
Target Milestone: ---   
Hardware: Other   
OS: Other   
URL: https://smash.suse.de/issue/397859/
Whiteboard: CVSSv3.1:SUSE:CVE-2021-47125:5.5:(AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Found By: Security Response Team Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---

Description SMASH SMASH 2024-03-18 08:56:15 UTC
In the Linux kernel, the following vulnerability has been resolved:

sch_htb: fix refcount leak in htb_parent_to_leaf_offload

The commit ae81feb7338c ("sch_htb: fix null pointer dereference
on a null new_q") fixes a NULL pointer dereference bug, but it
is not correct.

Because htb_graft_helper properly handles the case when new_q
is NULL, and after the previous patch by skipping this call
which creates an inconsistency : dev_queue->qdisc will still
point to the old qdisc, but cl->parent->leaf.q will point to
the new one (which will be noop_qdisc, because new_q was NULL).
The code is based on an assumption that these two pointers are
the same, so it can lead to refcount leaks.

The correct fix is to add a NULL pointer check to protect
qdisc_refcount_inc inside htb_parent_to_leaf_offload.

References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-47125
https://git.kernel.org/stable/c/944d671d5faa0d78980a3da5c0f04960ef1ad893
https://www.cve.org/CVERecord?id=CVE-2021-47125
https://git.kernel.org/stable/c/2411c02d03892a5057499f8102d0cc1e0f852416
https://bugzilla.redhat.com/show_bug.cgi?id=2269839
Comment 1 Gabriele Sonnu 2024-03-18 09:08:01 UTC
Offending commit (ae81feb7338c) found in:
 - ALP-current
 - cve/linux-5.14
 - SLE15-SP4-LTSS
 - SLE15-SP5
 - SLE15-SP6
 - stable

Fixing commit (944d671d5faa) found in:
 - ALP-current
 - cve/linux-5.14
 - SLE15-SP4-LTSS
 - SLE15-SP5
 - SLE15-SP6
 - stable

All branches fixed, @kernel-team please add the reference.
Comment 3 Andrea Mattiazzo 2024-06-05 12:56:43 UTC
All done, closing.