GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2026-46288 (GCVE-0-2026-46288)

Vulnerability from cvelistv5 – Published: 2026-06-08 15:41 – Updated: 2026-08-05 12:31
VLAI
Title
of: unittest: fix use-after-free in of_unittest_changeset()
Summary
In the Linux kernel, the following vulnerability has been resolved: of: unittest: fix use-after-free in of_unittest_changeset() The variable 'parent' is assigned the value of 'nchangeset' earlier in the function, meaning both point to the same struct device_node. The call to of_node_put(nchangeset) can decrement the reference count to zero and free the node if there are no other holders. After that, the code still uses 'parent' to check for the presence of a property and to read a string property, leading to a use-after-free. Fix this by moving the of_node_put() call after the last access to 'parent', avoiding the UAF.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 1c668ea65506e67ce2eae07b69bb09fcdd86e309 , < 37318d1a27c9cc5a70d3cd7e49e30ec86f2b8ca1 (git)
Affected: 1c668ea65506e67ce2eae07b69bb09fcdd86e309 , < 7f0f0926f3010b10cff5e93446258f971e42f2fd (git)
Affected: 1c668ea65506e67ce2eae07b69bb09fcdd86e309 , < 6fdad20b7975bdc32e85b45f8f7c640f6687b81f (git)
Affected: 1c668ea65506e67ce2eae07b69bb09fcdd86e309 , < faecdd423c27f0d6090156a435ba9dbbac0eaddb (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.12
Unaffected: 0 , < 6.12 (semver)
Unaffected: 6.12.86 , ≤ 6.12.* (semver)
Unaffected: 6.18.27 , ≤ 6.18.* (semver)
Unaffected: 7.0.4 , ≤ 7.0.* (semver)
Unaffected: 7.1 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/of/unittest.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "37318d1a27c9cc5a70d3cd7e49e30ec86f2b8ca1",
              "status": "affected",
              "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
              "versionType": "git"
            },
            {
              "lessThan": "7f0f0926f3010b10cff5e93446258f971e42f2fd",
              "status": "affected",
              "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
              "versionType": "git"
            },
            {
              "lessThan": "6fdad20b7975bdc32e85b45f8f7c640f6687b81f",
              "status": "affected",
              "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
              "versionType": "git"
            },
            {
              "lessThan": "faecdd423c27f0d6090156a435ba9dbbac0eaddb",
              "status": "affected",
              "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/of/unittest.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.12"
            },
            {
              "lessThan": "6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.86",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.27",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.0.*",
              "status": "unaffected",
              "version": "7.0.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.86",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.27",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0.4",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nof: unittest: fix use-after-free in of_unittest_changeset()\n\nThe variable \u0027parent\u0027 is assigned the value of \u0027nchangeset\u0027 earlier in the\nfunction, meaning both point to the same struct device_node. The call to\nof_node_put(nchangeset) can decrement the reference count to zero and\nfree the node if there are no other holders. After that, the code still\nuses \u0027parent\u0027 to check for the presence of a property and to read a\nstring property, leading to a use-after-free.\n\nFix this by moving the of_node_put() call after the last access to\n\u0027parent\u0027, avoiding the UAF."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.4,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable code runs only during late_initcall boot self-tests in drivers/of/unittest.c; reaching it requires local ability to build and boot a kernel with CONFIG_OF_UNITTEST enabled, with no network, syscall, or ioctl runtime path.\nAC:L - Once the unittest kernel boots, the UAF triggers deterministically after of_changeset_revert() when of_node_put() drops the sole reference; no race or attacker-uncontrolled memory layout is required.\nPR:N - Exploitation does not require privileges on a running production system\u2014only booting a specially built unittest kernel\u2014so no authenticated local user or namespace capability on the target image is needed.\nUI:N - The unittest executes automatically during kernel initialization after testcase DT data is attached; no additional victim interaction beyond booting the test configuration is required.\nS:U - The UAF corrupts kernel heap memory during in-kernel device-tree self-tests and does not cross VM, sandbox, or IOMMU security boundaries.\nC:H - After of_node_put() frees the device_node, of_property_present() and of_property_read_string() dereference freed memory, enabling kernel information disclosure from attacker-influencable freed heap contents.\nI:H - Use-after-free on a struct device_node in kernel heap can be leveraged for memory corruption and arbitrary kernel code execution via heap grooming, not merely a bounded write.\nA:H - Dereferencing a freed device_node during property lookups can cause kernel oops, BUG, or panic during boot-time unittest execution."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:31:02.134Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/37318d1a27c9cc5a70d3cd7e49e30ec86f2b8ca1"
        },
        {
          "url": "https://git.kernel.org/stable/c/7f0f0926f3010b10cff5e93446258f971e42f2fd"
        },
        {
          "url": "https://git.kernel.org/stable/c/6fdad20b7975bdc32e85b45f8f7c640f6687b81f"
        },
        {
          "url": "https://git.kernel.org/stable/c/faecdd423c27f0d6090156a435ba9dbbac0eaddb"
        }
      ],
      "title": "of: unittest: fix use-after-free in of_unittest_changeset()",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-46288",
    "datePublished": "2026-06-08T15:41:31.868Z",
    "dateReserved": "2026-05-13T15:03:33.110Z",
    "dateUpdated": "2026-08-05T12:31:02.134Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-46288",
      "date": "2026-09-19",
      "epss": "0.0014",
      "percentile": "0.03699"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/of/unittest.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "37318d1a27c9cc5a70d3cd7e49e30ec86f2b8ca1",
                    "status": "affected",
                    "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "7f0f0926f3010b10cff5e93446258f971e42f2fd",
                    "status": "affected",
                    "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "6fdad20b7975bdc32e85b45f8f7c640f6687b81f",
                    "status": "affected",
                    "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "faecdd423c27f0d6090156a435ba9dbbac0eaddb",
                    "status": "affected",
                    "version": "1c668ea65506e67ce2eae07b69bb09fcdd86e309",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/of/unittest.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.12"
                  },
                  {
                    "lessThan": "6.12",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.86",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.27",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.0.*",
                    "status": "unaffected",
                    "version": "7.0.4",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "configurations": [
          {
            "nodes": [
              {
                "cpeMatch": [
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "A868CB0E-7563-461B-9681-F1CE80B353EE",
                    "versionEndExcluding": "6.12.86",
                    "versionStartIncluding": "6.12",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "A10AC84F-C058-47D5-85B4-E6E51A613B74",
                    "versionEndExcluding": "6.18.27",
                    "versionStartIncluding": "6.13",
                    "vulnerable": true
                  },
                  {
                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                    "matchCriteriaId": "CDB78D6D-22C3-4154-B0D0-94AF1CE5C2E3",
                    "versionEndExcluding": "7.0.4",
                    "versionStartIncluding": "6.19",
                    "vulnerable": true
                  }
                ],
                "negate": false,
                "operator": "OR"
              }
            ]
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nof: unittest: fix use-after-free in of_unittest_changeset()\n\nThe variable \u0027parent\u0027 is assigned the value of \u0027nchangeset\u0027 earlier in the\nfunction, meaning both point to the same struct device_node. The call to\nof_node_put(nchangeset) can decrement the reference count to zero and\nfree the node if there are no other holders. After that, the code still\nuses \u0027parent\u0027 to check for the presence of a property and to read a\nstring property, leading to a use-after-free.\n\nFix this by moving the of_node_put() call after the last access to\n\u0027parent\u0027, avoiding the UAF."
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nof: unittest: corregir uso despu\u00e9s de liberaci\u00f3n en of_unittest_changeset()\n\nLa variable \u0027parent\u0027 se le asigna el valor de \u0027nchangeset\u0027 anteriormente en la funci\u00f3n, lo que significa que ambos apuntan a la misma estructura device_node. La llamada a of_node_put(nchangeset) puede decrementar el contador de referencias a cero y liberar el nodo si no hay otros poseedores. Despu\u00e9s de eso, el c\u00f3digo todav\u00eda usa \u0027parent\u0027 para verificar la presencia de una propiedad y para leer una propiedad de cadena, lo que lleva a un uso despu\u00e9s de liberaci\u00f3n.\n\nSolucione esto moviendo la llamada a of_node_put() despu\u00e9s del \u00faltimo acceso a \u0027parent\u0027, evitando el UAF."
          }
        ],
        "id": "CVE-2026-46288",
        "lastModified": "2026-07-23T08:10:00.137",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 8.4,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "NONE",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 2.5,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-06-08T17:16:46.957",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/37318d1a27c9cc5a70d3cd7e49e30ec86f2b8ca1"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/6fdad20b7975bdc32e85b45f8f7c640f6687b81f"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/7f0f0926f3010b10cff5e93446258f971e42f2fd"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "tags": [
              "Patch"
            ],
            "url": "https://git.kernel.org/stable/c/faecdd423c27f0d6090156a435ba9dbbac0eaddb"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Analyzed",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-416"
              }
            ],
            "source": "nvd@nist.gov",
            "type": "Primary"
          }
        ]
      }
    },
    "redhat_vex": {
      "aggregate_severity": "None",
      "current_release_date": "2026-06-28T06:34:38+00:00",
      "cve": "CVE-2026-46288",
      "id": "CVE-2026-46288",
      "initial_release_date": "2026-06-08T00:00:00+00:00",
      "product_status:known_not_affected": "274",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: of: unittest: fix use-after-free in of_unittest_changeset()",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-46288.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-11T01:10:17Z",
      "cve": "CVE-2026-46288",
      "id": "CVE-2026-46288",
      "initial_release_date": "2026-06-09T02:21:01Z",
      "product_status:known_affected": "17",
      "product_status:known_not_affected": "370",
      "product_status:recommended": "4",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-46288",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-46288.json",
      "version": "6"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…