{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-22061", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-12-29T08:45:45.812Z", "datePublished": "2025-04-16T14:12:16.924Z", "dateUpdated": "2026-08-05T11:56:27.146Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:56:27.146Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: airoha: Fix qid report in airoha_tc_get_htb_get_leaf_queue()\n\nFix the following kernel warning deleting HTB offloaded leafs and/or root\nHTB qdisc in airoha_eth driver properly reporting qid in\nairoha_tc_get_htb_get_leaf_queue routine.\n\n$tc qdisc replace dev eth1 root handle 10: htb offload\n$tc class add dev eth1 arent 10: classid 10:4 htb rate 100mbit ceil 100mbit\n$tc qdisc replace dev eth1 parent 10:4 handle 4: ets bands 8 \\\n quanta 1514 3028 4542 6056 7570 9084 10598 12112\n$tc qdisc del dev eth1 root\n\n[ 55.827864] ------------[ cut here ]------------\n[ 55.832493] WARNING: CPU: 3 PID: 2678 at 0xffffffc0798695a4\n[ 55.956510] CPU: 3 PID: 2678 Comm: tc Tainted: G O 6.6.71 #0\n[ 55.963557] Hardware name: Airoha AN7581 Evaluation Board (DT)\n[ 55.969383] pstate: 20400005 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)\n[ 55.976344] pc : 0xffffffc0798695a4\n[ 55.979851] lr : 0xffffffc079869a20\n[ 55.983358] sp : ffffffc0850536a0\n[ 55.986665] x29: ffffffc0850536a0 x28: 0000000000000024 x27: 0000000000000001\n[ 55.993800] x26: 0000000000000000 x25: ffffff8008b19000 x24: ffffff800222e800\n[ 56.000935] x23: 0000000000000001 x22: 0000000000000000 x21: ffffff8008b19000\n[ 56.008071] x20: ffffff8002225800 x19: ffffff800379d000 x18: 0000000000000000\n[ 56.015206] x17: ffffffbf9ea59000 x16: ffffffc080018000 x15: 0000000000000000\n[ 56.022342] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000001\n[ 56.029478] x11: ffffffc081471008 x10: ffffffc081575a98 x9 : 0000000000000000\n[ 56.036614] x8 : ffffffc08167fd40 x7 : ffffffc08069e104 x6 : ffffff8007f86000\n[ 56.043748] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000001\n[ 56.050884] x2 : 0000000000000000 x1 : 0000000000000250 x0 : ffffff800222c000\n[ 56.058020] Call trace:\n[ 56.060459] 0xffffffc0798695a4\n[ 56.063618] 0xffffffc079869a20\n[ 56.066777] __qdisc_destroy+0x40/0xa0\n[ 56.070528] qdisc_put+0x54/0x6c\n[ 56.073748] qdisc_graft+0x41c/0x648\n[ 56.077324] tc_get_qdisc+0x168/0x2f8\n[ 56.080978] rtnetlink_rcv_msg+0x230/0x330\n[ 56.085076] netlink_rcv_skb+0x5c/0x128\n[ 56.088913] rtnetlink_rcv+0x14/0x1c\n[ 56.092490] netlink_unicast+0x1e0/0x2c8\n[ 56.096413] netlink_sendmsg+0x198/0x3c8\n[ 56.100337] ____sys_sendmsg+0x1c4/0x274\n[ 56.104261] ___sys_sendmsg+0x7c/0xc0\n[ 56.107924] __sys_sendmsg+0x44/0x98\n[ 56.111492] __arm64_sys_sendmsg+0x20/0x28\n[ 56.115580] invoke_syscall.constprop.0+0x58/0xfc\n[ 56.120285] do_el0_svc+0x3c/0xbc\n[ 56.123592] el0_svc+0x18/0x4c\n[ 56.126647] el0t_64_sync_handler+0x118/0x124\n[ 56.131005] el0t_64_sync+0x150/0x154\n[ 56.134660] ---[ end trace 0000000000000000 ]---" } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The vulnerable code is reached only through an `AF_NETLINK`/`NETLINK_ROUTE` socket (`RTM_NEWQDISC`/`RTM_DELQDISC` via `tc`), which requires local system access. No remote peer data reaches `airoha_tc_get_htb_get_leaf_queue()`.\nAC:L - The wrong qid is returned deterministically for every `TC_HTB_LEAF_QUERY_QUEUE`, and the four-command reproducer in the commit triggers the WARN 100% of the time; the follow-on lock-exclusion race has both sides under attacker control (they issue `tc qdisc change` while generating traffic on the offloaded channel).\nPR:L - `rtnetlink_rcv_msg()` gates on namespace-relative `CAP_NET_ADMIN` (`netlink_net_capable`), which an unprivileged user obtains via `unshare -Urn`; per kernel scoring practice tc/qdisc netlink paths are Low, not High.\nUI:N - The attacker performs the entire sequence (create offloaded HTB root, add class, graft a child qdisc, tear it down) from their own process. No victim action is involved.\nS:U - The corruption and the resulting crash stay within the kernel's own security authority on the affected host; no VM, sandbox, or IOMMU boundary is crossed.\nC:H - The mismatched `sch->dev_queue` makes `sch_tree_lock()` acquire an unrelated qdisc's lock, so `ets_qdisc_change()` mutates `q->active`/`q->classes[].alist` and swaps child qdisc pointers concurrently with `ets_qdisc_dequeue()`, yielding a use-after-free on freed qdisc objects that can be leveraged as a kernel-memory read primitive.\nI:H - The same loss of mutual exclusion permits unsynchronized `list_del`/`list_move_tail` on the ETS active list and `qdisc_put()` of a qdisc the datapath is still dereferencing, giving linked-list corruption and a UAF write primitive suitable for control-flow hijacking.\nA:H - The commit documents a reproducible `WARN_ON` splat on `tc qdisc del dev eth1 root`, which is a kernel panic on the `panic_on_warn` configurations common to hardened and embedded builds, and the resulting corrupted qdisc/TX-queue state additionally causes oopses via the racing ETS teardown." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/ethernet/airoha/airoha_eth.c" ], "versions": [ { "version": "ef1ca9271313b4ea7b03de69576aacef1e78f381", "lessThan": "d7f76197e49e46a8c082a6fededaa8a07e69a860", "status": "affected", "versionType": "git" }, { "version": "ef1ca9271313b4ea7b03de69576aacef1e78f381", "lessThan": "57b290d97c6150774bf929117ca737a26d8fc33d", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/ethernet/airoha/airoha_eth.c" ], "versions": [ { "version": "6.14", "status": "affected" }, { "version": "0", "lessThan": "6.14", "status": "unaffected", "versionType": "semver" }, { "version": "6.14.2", "lessThanOrEqual": "6.14.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.15", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.14", "versionEndExcluding": "6.14.2" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.14", "versionEndExcluding": "6.15" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/d7f76197e49e46a8c082a6fededaa8a07e69a860" }, { "url": "https://git.kernel.org/stable/c/57b290d97c6150774bf929117ca737a26d8fc33d" } ], "title": "net: airoha: Fix qid report in airoha_tc_get_htb_get_leaf_queue()", "x_generator": { "engine": "bippy-1.2.0" } } } }