{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-44995", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-08-21T05:34:56.672Z", "datePublished": "2024-09-04T19:54:40.878Z", "dateUpdated": "2026-08-05T11:37:34.142Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:37:34.142Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: hns3: fix a deadlock problem when config TC during resetting\n\nWhen config TC during the reset process, may cause a deadlock, the flow is\nas below:\n pf reset start\n │\n ▼\n ......\nsetup tc │\n │ ▼\n ▼ DOWN: napi_disable()\nnapi_disable()(skip) │\n │ │\n ▼ ▼\n ...... ......\n │ │\n ▼ │\nnapi_enable() │\n ▼\n UINIT: netif_napi_del()\n │\n ▼\n ......\n │\n ▼\n INIT: netif_napi_add()\n │\n ▼\n ...... global reset start\n │ │\n ▼ ▼\n UP: napi_enable()(skip) ......\n │ │\n ▼ ▼\n ...... napi_disable()\n\nIn reset process, the driver will DOWN the port and then UINIT, in this\ncase, the setup tc process will UP the port before UINIT, so cause the\nproblem. Adds a DOWN process in UINIT to fix it." } ], "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 vulnerability is reached through local configuration interfaces — rtnetlink `RTM_NEWQDISC` (mqprio offload → `hns3_nic_setup_tc`) raced against an `ethtool --reset` / `ethtool -L` triggered PF reset. No remote peer input reaches this path, so it requires local access to the host.\nAC:L - The attacker controls both halves of the race: they start the PF reset themselves via `ethtool -r`, and `hclge_reset()` drops rtnl_lock for the entire hardware-reset wait, leaving a long, deterministic window in which the tc/mqprio ioctl can be issued in a tight loop until it lands. `hclge_setup_tc()` has no reset-state guard at all, so no condition outside the attacker's control is involved.\nPR:L - Both triggers (tc qdisc/mqprio and ethtool reset) require only CAP_NET_ADMIN over the hns3 netdevice, which is a delegatable capability held by unprivileged network-management daemons and by the owner of a user namespace whose network namespace holds the device (a dedicated PF handed to a container). This is not full root in the initial namespace, so Low rather than High.\nUI:N - The attacker issues both the reset request and the TC configuration themselves; no action by any other user or administrator is needed.\nS:U - The corruption and the hang are confined to the kernel of the same host, within the same security authority — there is no hypervisor, IOMMU, or sandbox boundary crossed.\nC:H - Because the missing `hns3_nic_net_stop()` lets `hns3_reset_notify_uninit_enet()` run against a live port, `devm_kfree(priv->tqp_vector)` and `hns3_uninit_all_ring()` free the NAPI contexts, DIM work items and DMA descriptor buffers while NAPI polling, pending DIM works and hardware DMA are still using them. The resulting use-after-free over freed, reallocatable slab memory can be leveraged to read attacker-chosen kernel data.\nI:H - The same use-after-free gives a write primitive — the uncancelled `rx_group.dim.work`/`tx_group.dim.work` execute against the freed `tqp_vector`, and the NIC continues DMA-writing into freed ring buffers, so heap-sprayed objects can be corrupted, which is exploitable toward control-flow hijack.\nA:H - The documented outcome is a permanent deadlock: `napi_disable()` spins forever on a NAPI that was re-added but never enabled, and it does so while the reset worker holds rtnl_lock, wedging every subsequent network-configuration operation on the machine plus the NIC itself. Any kernel hang/deadlock is High." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/ethernet/hisilicon/hns3/hns3_enet.c" ], "versions": [ { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "67492d4d105c0a6321b00c393eec96b9a7a97a16", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "fc250eca15bde34c4c8f806b9d88f55bd56a992c", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "195918217448a6bb7f929d6a2ffffce9f1ece1cc", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "6ae2b7d63cd056f363045eb65409143e16f23ae8", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "fa1d4de7265c370e673583ac8d1bd17d21826cd9", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "de37408d5c26fc4a296a28a0c96dcb814219bfa1", "status": "affected", "versionType": "git" }, { "version": "bb6b94a896d4dd4dcdeccca87c3fd22521c652c0", "lessThan": "be5e816d00a506719e9dbb1a9c861c5ced30a109", "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/hisilicon/hns3/hns3_enet.c" ], "versions": [ { "version": "4.15", "status": "affected" }, { "version": "0", "lessThan": "4.15", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.283", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.225", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.166", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.107", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.48", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.10.7", "lessThanOrEqual": "6.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11", "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": "4.15", "versionEndExcluding": "5.4.283" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "5.10.225" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "5.15.166" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "6.1.107" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "6.6.48" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "6.10.7" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.15", "versionEndExcluding": "6.11" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/67492d4d105c0a6321b00c393eec96b9a7a97a16" }, { "url": "https://git.kernel.org/stable/c/fc250eca15bde34c4c8f806b9d88f55bd56a992c" }, { "url": "https://git.kernel.org/stable/c/195918217448a6bb7f929d6a2ffffce9f1ece1cc" }, { "url": "https://git.kernel.org/stable/c/6ae2b7d63cd056f363045eb65409143e16f23ae8" }, { "url": "https://git.kernel.org/stable/c/fa1d4de7265c370e673583ac8d1bd17d21826cd9" }, { "url": "https://git.kernel.org/stable/c/de37408d5c26fc4a296a28a0c96dcb814219bfa1" }, { "url": "https://git.kernel.org/stable/c/be5e816d00a506719e9dbb1a9c861c5ced30a109" } ], "title": "net: hns3: fix a deadlock problem when config TC during resetting", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "timestamp": "2024-09-04T20:19:19.943422Z", "id": "CVE-2024-44995", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "role": "CISA Coordinator", "version": "2.0.3" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-09-04T20:19:31.635Z" } }, { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html" }, { "url": "https://lists.debian.org/debian-lts-announce/2024/10/msg00003.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T22:14:51.240Z" } } ] } }