{"id":"CVE-2025-39870","state":"PUBLISHED","title":"dmaengine: idxd: Fix double free in idxd_setup_wqs()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ndmaengine: idxd: Fix double free in idxd_setup_wqs()\n\nThe clean up in idxd_setup_wqs() has had a couple bugs because the error\nhandling is a bit subtle.  It's simpler to just re-write it in a cleaner\nway.  The issues here are:\n\n1) If \"idxd->max_wqs\" is <= 0 then we call put_device(conf_dev) when\n   \"conf_dev\" hasn't been initialized.\n2) If kzalloc_node() fails then again \"conf_dev\" is invalid.  It's\n   either uninitialized or it points to the \"conf_dev\" from the\n   previous iteration so it leads to a double free.\n\nIt's better to free partial loop iterations within the loop and then\nthe unwinding at the end can handle whole loop iterations.  I also\nrenamed the labels to describe what the goto does and not where the goto\nwas located.","publishedAt":"2025-09-23T06:00:44.369Z","updatedAt":"2026-05-23T16:00:52.713Z","severity":null,"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"d584acdf54f409cb7eae1359ae6c12aaabedeed8","status":"affected","lessThan":"25e6146c2812487a88f619d5ff6efbdcd5b2bc31","versionType":"git"},{"version":"47846211998a9ffb0fcc08092eb95ac783d2b11a","status":"affected","lessThan":"df82c7901513fd0fc738052a8e6a330d92cc8ec9","versionType":"git"},{"version":"5fcd392dae6d6aba7dc64ffdbb838ff191315da3","status":"affected","lessThan":"ec5430d090d0b6ace8fefa290fc37e88930017d2","versionType":"git"},{"version":"3fd2f4bc010cdfbc07dd21018dc65bd9370eb7a4","status":"affected","lessThan":"9f0e225635475b2285b966271d5e82cba74295b1","versionType":"git"},{"version":"3fd2f4bc010cdfbc07dd21018dc65bd9370eb7a4","status":"affected","lessThan":"39aaa337449e71a41d4813be0226a722827ba606","versionType":"git"},{"version":"ed2c66000aa64c0d2621864831f0d04c820a1441","status":"affected","versionType":"git"},{"version":"6.1.140","status":"affected","lessThan":"6.1.153","versionType":"semver"},{"version":"6.6.92","status":"affected","lessThan":"6.6.107","versionType":"semver"},{"version":"6.12.30","status":"affected","lessThan":"6.12.48","versionType":"semver"},{"version":"6.14.8","status":"affected","lessThan":"6.15","versionType":"semver"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/dma/idxd/init.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.15","versionType":"semver"},{"version":"6.1.153","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.107","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.48","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.16.8","status":"unaffected","lessThanOrEqual":"6.16.*","versionType":"semver"},{"version":"6.17","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/dma/idxd/init.c"]}],"references":["https://git.kernel.org/stable/c/25e6146c2812487a88f619d5ff6efbdcd5b2bc31","https://git.kernel.org/stable/c/df82c7901513fd0fc738052a8e6a330d92cc8ec9","https://git.kernel.org/stable/c/ec5430d090d0b6ace8fefa290fc37e88930017d2","https://git.kernel.org/stable/c/9f0e225635475b2285b966271d5e82cba74295b1","https://git.kernel.org/stable/c/39aaa337449e71a41d4813be0226a722827ba606","https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"],"weaknesses":[],"ingestedAt":"2026-10-29T20:09:09.358Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2025/39xxx/CVE-2025-39870.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-39870","state":"PUBLISHED","datePublished":"2025-09-23T06:00:44.369Z","dateUpdated":"2026-05-23T16:00:52.713Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2025-04-16T07:20:57.143Z"},"containers":{"cna":{"title":"dmaengine: idxd: Fix double free in idxd_setup_wqs()","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\ndmaengine: idxd: Fix double free in idxd_setup_wqs()\n\nThe clean up in idxd_setup_wqs() has had a couple bugs because the error\nhandling is a bit subtle.  It's simpler to just re-write it in a cleaner\nway.  The issues here are:\n\n1) If \"idxd->max_wqs\" is <= 0 then we call put_device(conf_dev) when\n   \"conf_dev\" hasn't been initialized.\n2) If kzalloc_node() fails then again \"conf_dev\" is invalid.  It's\n   either uninitialized or it points to the \"conf_dev\" from the\n   previous iteration so it leads to a double free.\n\nIt's better to free partial loop iterations within the loop and then\nthe unwinding at the end can handle whole loop iterations.  I also\nrenamed the labels to describe what the goto does and not where the goto\nwas located."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"d584acdf54f409cb7eae1359ae6c12aaabedeed8","status":"affected","lessThan":"25e6146c2812487a88f619d5ff6efbdcd5b2bc31","versionType":"git"},{"version":"47846211998a9ffb0fcc08092eb95ac783d2b11a","status":"affected","lessThan":"df82c7901513fd0fc738052a8e6a330d92cc8ec9","versionType":"git"},{"version":"5fcd392dae6d6aba7dc64ffdbb838ff191315da3","status":"affected","lessThan":"ec5430d090d0b6ace8fefa290fc37e88930017d2","versionType":"git"},{"version":"3fd2f4bc010cdfbc07dd21018dc65bd9370eb7a4","status":"affected","lessThan":"9f0e225635475b2285b966271d5e82cba74295b1","versionType":"git"},{"version":"3fd2f4bc010cdfbc07dd21018dc65bd9370eb7a4","status":"affected","lessThan":"39aaa337449e71a41d4813be0226a722827ba606","versionType":"git"},{"version":"ed2c66000aa64c0d2621864831f0d04c820a1441","status":"affected","versionType":"git"},{"version":"6.1.140","status":"affected","lessThan":"6.1.153","versionType":"semver"},{"version":"6.6.92","status":"affected","lessThan":"6.6.107","versionType":"semver"},{"version":"6.12.30","status":"affected","lessThan":"6.12.48","versionType":"semver"},{"version":"6.14.8","status":"affected","lessThan":"6.15","versionType":"semver"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/dma/idxd/init.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.15","versionType":"semver"},{"version":"6.1.153","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.107","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.48","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.16.8","status":"unaffected","lessThanOrEqual":"6.16.*","versionType":"semver"},{"version":"6.17","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/dma/idxd/init.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/25e6146c2812487a88f619d5ff6efbdcd5b2bc31"},{"url":"https://git.kernel.org/stable/c/df82c7901513fd0fc738052a8e6a330d92cc8ec9"},{"url":"https://git.kernel.org/stable/c/ec5430d090d0b6ace8fefa290fc37e88930017d2"},{"url":"https://git.kernel.org/stable/c/9f0e225635475b2285b966271d5e82cba74295b1"},{"url":"https://git.kernel.org/stable/c/39aaa337449e71a41d4813be0226a722827ba606"}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-05-23T16:00:52.713Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.1.140","versionEndExcluding":"6.1.153"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.6.92","versionEndExcluding":"6.6.107"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.12.30","versionEndExcluding":"6.12.48"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"6.16.8"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.15","versionEndExcluding":"6.17"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.14.8"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"}],"providerMetadata":{"shortName":"CVE","orgId":"af854a3a-2127-422b-91ae-364da2661108","dateUpdated":"2025-11-03T17:44:19.166Z"}}]}}}