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

CVE-2026-89436 (GCVE-0-2026-89436)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:43 – Updated: 2026-09-13 06:29
VLAI
Title
platform/x86: panasonic-laptop: Fix sentinel write past pcc->sinf[]
Summary
In the Linux kernel, the following vulnerability has been resolved: platform/x86: panasonic-laptop: Fix sentinel write past pcc->sinf[] acpi_pcc_retrieve_biosdata() rejects SINF packages only when pcc->num_sifr is strictly less than hkey->package.count, then unconditionally writes a trailing sentinel at pcc->sinf[hkey->package.count]. But pcc->sinf[] is allocated with exactly pcc->num_sifr elements (valid indices 0..num_sifr-1), so that write needs num_sifr strictly greater than package.count to stay in bounds -- num_sifr == package.count passes the existing check but still overflows by one element. This is exactly the case probe()'s existing num_sifr++ workaround ("Some DSDT-s have an off-by-one bug where the SINF package count is one higher than the SQTY reported value") is written to accommodate: when a DSDT's SINF package count equals SQTY+1, the workaround makes num_sifr equal to package.count, which is precisely the boundary that overflows here. Found via UBSan (array-index-out-of-bounds) on hardware where HKEY.SQTY returns 37 and HKEY.SINF()'s package has 38 elements: num_sifr becomes 38 after the += 1 workaround, the loop correctly fills indices 0..37, and the sentinel write then targets index 38, one past the end -- a silent 4-byte heap overflow on kernels without CONFIG_UBSAN. Tightening the rejection check to num_sifr <= package.count would avoid the overflow but breaks probe() entirely on exactly this hardware, since num_sifr == package.count is the case the off-by-one workaround exists to support. Nothing else in the driver reads this sentinel value back, so simply skip the write when there is no room for it instead.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: a3d0dbd18ce908292607bb6cf37c978ece8a33d4 , < a93df956ee4d903735b6d395362c839cb1dc07e3 (git)
Affected: a3d0dbd18ce908292607bb6cf37c978ece8a33d4 , < 329f10d8be193bf36af124e00b9dd6644cd71724 (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.2
Unaffected: 0 , < 7.2 (semver)
Unaffected: 7.2.4 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc1 , ≤ * (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/platform/x86/panasonic-laptop.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "a93df956ee4d903735b6d395362c839cb1dc07e3",
              "status": "affected",
              "version": "a3d0dbd18ce908292607bb6cf37c978ece8a33d4",
              "versionType": "git"
            },
            {
              "lessThan": "329f10d8be193bf36af124e00b9dd6644cd71724",
              "status": "affected",
              "version": "a3d0dbd18ce908292607bb6cf37c978ece8a33d4",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/platform/x86/panasonic-laptop.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "7.2"
            },
            {
              "lessThan": "7.2",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc1",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "7.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "7.2",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nplatform/x86: panasonic-laptop: Fix sentinel write past pcc-\u003esinf[]\n\nacpi_pcc_retrieve_biosdata() rejects SINF packages only when\npcc-\u003enum_sifr is strictly less than hkey-\u003epackage.count, then\nunconditionally writes a trailing sentinel at\npcc-\u003esinf[hkey-\u003epackage.count]. But pcc-\u003esinf[] is allocated with\nexactly pcc-\u003enum_sifr elements (valid indices 0..num_sifr-1), so that\nwrite needs num_sifr strictly greater than package.count to stay in\nbounds -- num_sifr == package.count passes the existing check but\nstill overflows by one element.\n\nThis is exactly the case probe()\u0027s existing num_sifr++ workaround\n(\"Some DSDT-s have an off-by-one bug where the SINF package count is\none higher than the SQTY reported value\") is written to accommodate:\nwhen a DSDT\u0027s SINF package count equals SQTY+1, the workaround makes\nnum_sifr equal to package.count, which is precisely the boundary that\noverflows here. Found via UBSan (array-index-out-of-bounds) on\nhardware where HKEY.SQTY returns 37 and HKEY.SINF()\u0027s package has 38\nelements: num_sifr becomes 38 after the += 1 workaround, the loop\ncorrectly fills indices 0..37, and the sentinel write then targets\nindex 38, one past the end -- a silent 4-byte heap overflow on kernels\nwithout CONFIG_UBSAN.\n\nTightening the rejection check to num_sifr \u003c= package.count would\navoid the overflow but breaks probe() entirely on exactly this\nhardware, since num_sifr == package.count is the case the off-by-one\nworkaround exists to support. Nothing else in the driver reads this\nsentinel value back, so simply skip the write when there is no room\nfor it instead."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The overflow is reached by reading world-readable sysfs files under /sys/bus/acpi/devices/MAT00xx:00/ (numbatt, lcdtype, mute, sticky_key, eco_mode, brightness) and /sys/class/backlight/panasonic/, which call acpi_pcc_retrieve_biosdata(); there is no network or remote-peer path into this ACPI laptop driver.\nAC:L - On Panasonic Let\u0027s Note firmware where HKEY.SINF\u0027s package count equals SQTY+1, every sysfs or backlight read deterministically writes the sentinel one past pcc-\u003esinf[]; no race is required. That DSDT off-by-one is a fixed property of the affected hardware being scored, not a per-attempt condition.\nPR:L - The triggering attributes are DEVICE_ATTR_RO (0444) or DEVICE_ATTR_RW (0644), so any unprivileged local user can read them and cause the out-of-bounds write with no capability, group membership, or init-namespace root.\nUI:N - The attacker reads a sysfs attribute from their own process; no victim action such as mounting a filesystem, plugging hardware, or confirming a prompt is required.\nS:U - The 4-byte heap overflow corrupts host kernel slab memory belonging to the same kernel security authority that hosts the driver; it does not cross a VM, IOMMU, or sandbox boundary.\nC:H - The off-by-one writes 0xffffffff one u32 past the kzalloc_flex pcc_acpi object, corrupting adjacent kmalloc slab contents including pointers on size-class-aligned allocations; that heap corruption can be leveraged for kernel information disclosure, so confidentiality is High.\nI:H - This is a repeatable 4-byte out-of-bounds heap write of the sentinel past pcc-\u003esinf[]. Per kernel scoring guidance an OOB write is High because heap grooming can place a security-relevant object at the overwritten offset and turn it into a control-flow or privilege primitive.\nA:H - Writing past the kmalloc object can corrupt neighboring slab objects or metadata and produce a kernel oops or panic, and debug kernels trip KASAN/UBSAN on the counted-by overflow; any such crash is Availability High."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:29:20.944Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/a93df956ee4d903735b6d395362c839cb1dc07e3"
        },
        {
          "url": "https://git.kernel.org/stable/c/329f10d8be193bf36af124e00b9dd6644cd71724"
        }
      ],
      "title": "platform/x86: panasonic-laptop: Fix sentinel write past pcc-\u003esinf[]",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89436",
    "datePublished": "2026-09-11T19:43:06.732Z",
    "dateReserved": "2026-09-11T19:38:34.702Z",
    "dateUpdated": "2026-09-13T06:29:20.944Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89436",
      "date": "2026-09-16",
      "epss": "0.00133",
      "percentile": "0.03198"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89436\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:19:23.847\",\"lastModified\":\"2026-09-13T07:17:08.367\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nplatform/x86: panasonic-laptop: Fix sentinel write past pcc-\u003esinf[]\\n\\nacpi_pcc_retrieve_biosdata() rejects SINF packages only when\\npcc-\u003enum_sifr is strictly less than hkey-\u003epackage.count, then\\nunconditionally writes a trailing sentinel at\\npcc-\u003esinf[hkey-\u003epackage.count]. But pcc-\u003esinf[] is allocated with\\nexactly pcc-\u003enum_sifr elements (valid indices 0..num_sifr-1), so that\\nwrite needs num_sifr strictly greater than package.count to stay in\\nbounds -- num_sifr == package.count passes the existing check but\\nstill overflows by one element.\\n\\nThis is exactly the case probe()\u0027s existing num_sifr++ workaround\\n(\\\"Some DSDT-s have an off-by-one bug where the SINF package count is\\none higher than the SQTY reported value\\\") is written to accommodate:\\nwhen a DSDT\u0027s SINF package count equals SQTY+1, the workaround makes\\nnum_sifr equal to package.count, which is precisely the boundary that\\noverflows here. Found via UBSan (array-index-out-of-bounds) on\\nhardware where HKEY.SQTY returns 37 and HKEY.SINF()\u0027s package has 38\\nelements: num_sifr becomes 38 after the += 1 workaround, the loop\\ncorrectly fills indices 0..37, and the sentinel write then targets\\nindex 38, one past the end -- a silent 4-byte heap overflow on kernels\\nwithout CONFIG_UBSAN.\\n\\nTightening the rejection check to num_sifr \u003c= package.count would\\navoid the overflow but breaks probe() entirely on exactly this\\nhardware, since num_sifr == package.count is the case the off-by-one\\nworkaround exists to support. Nothing else in the driver reads this\\nsentinel value back, so simply skip the write when there is no room\\nfor it instead.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/platform/x86/panasonic-laptop.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"a3d0dbd18ce908292607bb6cf37c978ece8a33d4\",\"lessThan\":\"a93df956ee4d903735b6d395362c839cb1dc07e3\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"a3d0dbd18ce908292607bb6cf37c978ece8a33d4\",\"lessThan\":\"329f10d8be193bf36af124e00b9dd6644cd71724\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/platform/x86/panasonic-laptop.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"7.2\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"7.2\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2.4\",\"lessThanOrEqual\":\"7.2.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.3-rc1\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"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\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/329f10d8be193bf36af124e00b9dd6644cd71724\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a93df956ee4d903735b6d395362c839cb1dc07e3\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-14T21:28:20+00:00",
      "cve": "CVE-2026-89436",
      "id": "CVE-2026-89436",
      "initial_release_date": "2026-09-11T00:00:00+00:00",
      "product_status:known_not_affected": "276",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: platform/x86: panasonic-laptop: Fix sentinel write past pcc-\u003esinf[]",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89436.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-15T00:59:31Z",
      "cve": "CVE-2026-89436",
      "id": "CVE-2026-89436",
      "initial_release_date": "2026-09-15T00:59:31Z",
      "product_status:known_not_affected": "353",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89436",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89436.json",
      "version": "2"
    }
  }
}



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…