{"api_version":"1","generated_at":"2026-10-21T18:42:56+00:00","cve":"CVE-2026-98693","urls":{"html":"https://cve.report/CVE-2026-98693","api":"https://cve.report/api/cve/CVE-2026-98693.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-98693","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-98693"},"summary":{"title":"thunderbolt: Hold a router reference for each allocated HopID","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nthunderbolt: Hold a router reference for each allocated HopID\n\ntb_stop() drops the reference to all DP tunnels but does not deactivate\nthem, thus nothing cancels a dprx_work still in flight (which holds its\nown tunnel reference) and the tunnel can outlive tb_switch_remove(). The\nHopID releases in tb_path_free() then operate on freed IDAs and trigger\nwarnings like\n\n  ida_free called for id=8 which is not allocated.\n\nThis can be triggered by unbinding the driver while a DP tunnel is still\nwaiting for the DPRX capabilities read to finish. On the Apple NHI\nunplugging the cable runs into just that reliably because the read can\nnever finish right now and because the unplug powers down the entire\nUSB4 complex and removes the NHI device.\n\nTake a router reference whenever an input or output HopID is allocated\nand drop it again after the HopID is released. This keeps the ports and\ntheir HopID IDAs alive for as long as they are used.\n\nThe KUnit tests allocate routers without ever registering their devices\nso initialize the embedded struct device there as well and drop its\ninitial reference when the test is finished.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-10-18 16:17:22","updated_at":"2026-10-19 10:19:33"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/c444d2c17dc236680324fd989232199680a6c419","name":"https://git.kernel.org/stable/c/c444d2c17dc236680324fd989232199680a6c419","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/2b5f976119d8f099a03cbf700df3d9c8690fe33d","name":"https://git.kernel.org/stable/c/2b5f976119d8f099a03cbf700df3d9c8690fe33d","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/032c59c7681c661b63123231824170c025afb7e7","name":"https://git.kernel.org/stable/c/032c59c7681c661b63123231824170c025afb7e7","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-98693","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98693","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d6d458d42e1e1544a18f37f1d5c840e00d5261b9 c444d2c17dc236680324fd989232199680a6c419 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d6d458d42e1e1544a18f37f1d5c840e00d5261b9 2b5f976119d8f099a03cbf700df3d9c8690fe33d git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected d6d458d42e1e1544a18f37f1d5c840e00d5261b9 032c59c7681c661b63123231824170c025afb7e7 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 6.14","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.14 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.56 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.2.10 7.2.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.3 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/thunderbolt/switch.c","drivers/thunderbolt/test.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"c444d2c17dc236680324fd989232199680a6c419","status":"affected","version":"d6d458d42e1e1544a18f37f1d5c840e00d5261b9","versionType":"git"},{"lessThan":"2b5f976119d8f099a03cbf700df3d9c8690fe33d","status":"affected","version":"d6d458d42e1e1544a18f37f1d5c840e00d5261b9","versionType":"git"},{"lessThan":"032c59c7681c661b63123231824170c025afb7e7","status":"affected","version":"d6d458d42e1e1544a18f37f1d5c840e00d5261b9","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/thunderbolt/switch.c","drivers/thunderbolt/test.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"6.14"},{"lessThan":"6.14","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.56","versionType":"semver"},{"lessThanOrEqual":"7.2.*","status":"unaffected","version":"7.2.10","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.3","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.56","versionStartIncluding":"6.14","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.2.10","versionStartIncluding":"6.14","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.3","versionStartIncluding":"6.14","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nthunderbolt: Hold a router reference for each allocated HopID\n\ntb_stop() drops the reference to all DP tunnels but does not deactivate\nthem, thus nothing cancels a dprx_work still in flight (which holds its\nown tunnel reference) and the tunnel can outlive tb_switch_remove(). The\nHopID releases in tb_path_free() then operate on freed IDAs and trigger\nwarnings like\n\n  ida_free called for id=8 which is not allocated.\n\nThis can be triggered by unbinding the driver while a DP tunnel is still\nwaiting for the DPRX capabilities read to finish. On the Apple NHI\nunplugging the cable runs into just that reliably because the read can\nnever finish right now and because the unplug powers down the entire\nUSB4 complex and removes the NHI device.\n\nTake a router reference whenever an input or output HopID is allocated\nand drop it again after the HopID is released. This keeps the ports and\ntheir HopID IDAs alive for as long as they are used.\n\nThe KUnit tests allocate routers without ever registering their devices\nso initialize the embedded struct device there as well and drop its\ninitial reference when the test is finished."}],"providerMetadata":{"dateUpdated":"2026-10-19T09:24:03.100Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/c444d2c17dc236680324fd989232199680a6c419"},{"url":"https://git.kernel.org/stable/c/2b5f976119d8f099a03cbf700df3d9c8690fe33d"},{"url":"https://git.kernel.org/stable/c/032c59c7681c661b63123231824170c025afb7e7"}],"title":"thunderbolt: Hold a router reference for each allocated HopID","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-98693","datePublished":"2026-10-18T15:46:17.742Z","dateReserved":"2026-09-25T10:25:14.364Z","dateUpdated":"2026-10-19T09:24:03.100Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-18 16:17:22","lastModifiedDate":"2026-10-19 10:19:33","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"98693","Ordinal":"1","Title":"thunderbolt: Hold a router reference for each allocated HopID","CVE":"CVE-2026-98693","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"98693","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nthunderbolt: Hold a router reference for each allocated HopID\n\ntb_stop() drops the reference to all DP tunnels but does not deactivate\nthem, thus nothing cancels a dprx_work still in flight (which holds its\nown tunnel reference) and the tunnel can outlive tb_switch_remove(). The\nHopID releases in tb_path_free() then operate on freed IDAs and trigger\nwarnings like\n\n  ida_free called for id=8 which is not allocated.\n\nThis can be triggered by unbinding the driver while a DP tunnel is still\nwaiting for the DPRX capabilities read to finish. On the Apple NHI\nunplugging the cable runs into just that reliably because the read can\nnever finish right now and because the unplug powers down the entire\nUSB4 complex and removes the NHI device.\n\nTake a router reference whenever an input or output HopID is allocated\nand drop it again after the HopID is released. This keeps the ports and\ntheir HopID IDAs alive for as long as they are used.\n\nThe KUnit tests allocate routers without ever registering their devices\nso initialize the embedded struct device there as well and drop its\ninitial reference when the test is finished.","Type":"Description","Title":"thunderbolt: Hold a router reference for each allocated HopID"}]}}}