Skip to content
Heist/ feed
Back to feed
UnratedFix available

dmaengine: idxd: Fix double free in idxd_setup_wqs()

Type: advisorySources: OSV

In the Linux kernel, the following vulnerability has been resolved: dmaengine: idxd: Fix double free in idxd_setup_wqs() The clean up in idxd_setup_wqs() has had a couple bugs because the error handling is a bit subtle. It's simpler to just re-write it in a cleaner way. The issues here are: 1) If "idxd->max_wqs" is <= 0 then we call put_device(conf_dev) when "conf_dev" hasn't been initialized. 2) If kzalloc_node() fails then again "conf_dev" is invalid. It's either uninitialized or it points to the "conf_dev" from the previous iteration so it leads to a double free. It's better to free partial loop iterations within the loop and then the unwinding at the end can handle whole loop iterations. I also renamed the labels to describe what the goto does and not where the goto was located.

Products
Kernel
Affected versions
Not specified
Fixed versions
6.1.153, 6.12.48, 6.16.8, 6.6.107
CVEs
CVE-2025-39870
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 17:26 UTC · Revision 1

Source evidence

dmaengine: idxd: Fix double free in idxd_setup_wqs()

core-osv · Original source

Published 23 Sept 2025, 06:00 UTC

In the Linux kernel, the following vulnerability has been resolved: dmaengine: idxd: Fix double free in idxd_setup_wqs() The clean up in idxd_setup_wqs() has had a couple bugs because the error handling is a bit subtle. It's simpler to just re-write it in a cleaner way. The issues here are: 1) If "idxd->max_wqs" is <= 0 then we call put_device(conf_dev) when "conf_dev" hasn't been initialized. 2) If kzalloc_node() fails then again "conf_dev" is invalid. It's either uninitialized or it points to the "conf_dev" from the previous iteration so it leads to a double free. It's better to free partial loop iterations within the loop and then the unwinding at the end can handle whole loop iterations. I also renamed the labels to describe what the goto does and not where the goto was located.

osv:CVE-2025-39870

Kernel

Fixed versions: 6.1.153, 6.6.107, 6.12.48, 6.16.8

Complete source record
{
  "id": "73221ea095b7fd798343a3ae8fab43fce2268b424fd2f47210790c4389c55659",
  "url": "https://osv.dev/vulnerability/CVE-2025-39870",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "dmaengine: idxd: Fix double free in idxd_setup_wqs()",
    "summary": "In the Linux kernel, the following vulnerability has been resolved: dmaengine: idxd: Fix double free in idxd_setup_wqs() The clean up in idxd_setup_wqs() has had a couple bugs because the error handling is a bit subtle. It's simpler to just re-write it in a cleaner way. The issues here are: 1) If \"idxd->max_wqs\" is <= 0 then we call put_device(conf_dev) when \"conf_dev\" hasn't been initialized. 2) If kzalloc_node() fails then again \"conf_dev\" is invalid. It's either uninitialized or it points to the \"conf_dev\" from the previous iteration so it leads to a double free. It's better to free partial loop iterations within the loop and then the unwinding at the end can handle whole loop iterations. I also renamed the labels to describe what the goto does and not where the goto was located.",
    "evidence": "osv:CVE-2025-39870",
    "products": [
      {
        "name": {
          "value": "Kernel",
          "evidence": "/affected/1/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [
          {
            "value": "6.1.153",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.6.107",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.12.48",
            "evidence": "/affected/1/ranges"
          },
          {
            "value": "6.16.8",
            "evidence": "/affected/1/ranges"
          }
        ],
        "affected_versions": []
      }
    ],
    "severity": "unknown",
    "structured": {
      "id": "CVE-2025-39870",
      "aliases": [
        "CVE-2025-39870"
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "d584acdf54f409cb7eae1359ae6c12aaabedeed8"
                },
                {
                  "fixed": "25e6146c2812487a88f619d5ff6efbdcd5b2bc31"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "47846211998a9ffb0fcc08092eb95ac783d2b11a"
                },
                {
                  "fixed": "df82c7901513fd0fc738052a8e6a330d92cc8ec9"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "5fcd392dae6d6aba7dc64ffdbb838ff191315da3"
                },
                {
                  "fixed": "ec5430d090d0b6ace8fefa290fc37e88930017d2"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "3fd2f4bc010cdfbc07dd21018dc65bd9370eb7a4"
                },
                {
                  "fixed": "9f0e225635475b2285b966271d5e82cba74295b1"
                },
                {
                  "fixed": "39aaa337449e71a41d4813be0226a722827ba606"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.1.140"
                },
                {
                  "fixed": "6.1.153"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.6.92"
                },
                {
                  "fixed": "6.6.107"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.12.30"
                },
                {
                  "fixed": "6.12.48"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "6.14.8"
                },
                {
                  "fixed": "6.15"
                }
              ]
            },
            {
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "type": "GIT",
              "events": [
                {
                  "introduced": "ed2c66000aa64c0d2621864831f0d04c820a1441"
                }
              ]
            }
          ],
          "versions": [
            "v6.1.152",
            "v6.1.151",
            "v6.1.150",
            "v6.1.149",
            "v6.1.148",
            "v6.1.147",
            "v6.1.146",
            "v6.1.145",
            "v6.1.144",
            "v6.1.143",
            "v6.1.142",
            "v6.1.141",
            "v6.1.140",
            "v6.6.106",
            "v6.6.105",
            "v6.6.104",
            "v6.6.103",
            "v6.6.102",
            "v6.6.101",
            "v6.6.100",
            "v6.6.99",
            "v6.6.98",
            "v6.6.97",
            "v6.6.96",
            "v6.6.95",
            "v6.6.94",
            "v6.6.93",
            "v6.6.92",
            "v6.12.47",
            "v6.12.46",
            "v6.12.45",
            "v6.12.44",
            "v6.12.43",
            "v6.12.42",
            "v6.12.41",
            "v6.12.40",
            "v6.12.39",
            "v6.12.38",
            "v6.12.37",
            "v6.12.36",
            "v6.12.35",
            "v6.12.34",
            "v6.12.33",
            "v6.12.32",
            "v6.12.31",
            "v6.12.30",
            "v6.14.11",
            "v6.14.10",
            "v6.14.9",
            "v6.14.8"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2025-39870.json"
          }
        },
        {
          "ranges": [
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "0"
                },
                {
                  "fixed": "6.1.153"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.2.0"
                },
                {
                  "fixed": "6.6.107"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.7.0"
                },
                {
                  "fixed": "6.12.48"
                }
              ]
            },
            {
              "type": "ECOSYSTEM",
              "events": [
                {
                  "introduced": "6.13.0"
                },
                {
                  "fixed": "6.16.8"
                }
              ]
            }
          ],
          "package": {
            "name": "Kernel",
            "ecosystem": "Linux"
          },
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2025-39870.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:30.811533321Z",
      "provider": "osv",
      "references": [
        "https://git.kernel.org/stable/c/25e6146c2812487a88f619d5ff6efbdcd5b2bc31",
        "https://git.kernel.org/stable/c/39aaa337449e71a41d4813be0226a722827ba606",
        "https://git.kernel.org/stable/c/9f0e225635475b2285b966271d5e82cba74295b1",
        "https://git.kernel.org/stable/c/df82c7901513fd0fc738052a8e6a330d92cc8ec9",
        "https://git.kernel.org/stable/c/ec5430d090d0b6ace8fefa290fc37e88930017d2",
        "https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/39xxx/CVE-2025-39870.json",
        "https://nvd.nist.gov/vuln/detail/CVE-2025-39870",
        "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
      ],
      "provider_metadata": {
        "cna_assigner": "Linux",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/39xxx/CVE-2025-39870.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2025-39870",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": null
  },
  "source_id": "core-osv",
  "document_id": 497834,
  "published_at": "2025-09-23T06:00:44.369+00:00"
}