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

CVE-2026-89459 (GCVE-0-2026-89459)

Vulnerability from cvelistv5 – Published: 2026-09-11 19:43 – Updated: 2026-09-13 06:29
VLAI
Title
s390/percpu: Fix MVIY_PERCPU() with older binutils
Summary
In the Linux kernel, the following vulnerability has been resolved: s390/percpu: Fix MVIY_PERCPU() with older binutils Commit a737737cdb9c ("s390/percpu: Infrastructure for more efficient this_cpu operations") introduced MVIY_PERCPU(), which stringifies arguments that are already C string literals. This generates an assembler macro invocation with whitespace-separated quoted arguments: GEN_MVIY "459712" "%r3" GNU as versions prior to binutils 2.39 drop the separating whitespace between quoted macro arguments during input scrubbing. They consequently parse the invocation as a single argument and emit repeated warnings: Warning: missing closing `"' The .ifc in GEN_MVIY never matches and GNU as exits successfully without emitting the mviy instruction. As a result, the interrupted per-CPU sequence is not marked in lowcore and the exception return path cannot repair the per-CPU address register after migration. All MVIY_PERCPU() callers pass C string literals. Use them directly and separate the assembler macro arguments with an explicit comma. The resulting invocation is: GEN_MVIY 459712, %r3 This form is unambiguous for GNU as and LLVM's integrated assembler. This behavior was fixed in GNU as from binutils 2.39, but Linux supports binutils 2.30.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: a737737cdb9c94e40a9926cdc2320f874c05d709 , < 91770b08a120967077ae78600612f18bc5ee3caf (git)
Affected: a737737cdb9c94e40a9926cdc2320f874c05d709 , < 101782f8945a125044347312d74d488c05741c4a (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": [
            "arch/s390/include/asm/percpu.h"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "91770b08a120967077ae78600612f18bc5ee3caf",
              "status": "affected",
              "version": "a737737cdb9c94e40a9926cdc2320f874c05d709",
              "versionType": "git"
            },
            {
              "lessThan": "101782f8945a125044347312d74d488c05741c4a",
              "status": "affected",
              "version": "a737737cdb9c94e40a9926cdc2320f874c05d709",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/s390/include/asm/percpu.h"
          ],
          "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\ns390/percpu: Fix MVIY_PERCPU() with older binutils\n\nCommit a737737cdb9c (\"s390/percpu: Infrastructure for more efficient\nthis_cpu operations\") introduced MVIY_PERCPU(), which stringifies\narguments that are already C string literals. This generates an\nassembler macro invocation with whitespace-separated quoted arguments:\n\n  GEN_MVIY \"459712\" \"%r3\"\n\nGNU as versions prior to binutils 2.39 drop the separating whitespace\nbetween quoted macro arguments during input scrubbing. They\nconsequently parse the invocation as a single argument and emit\nrepeated warnings:\n\n  Warning: missing closing `\"\u0027\n\nThe .ifc in GEN_MVIY never matches and GNU as exits successfully\nwithout emitting the mviy instruction. As a result, the interrupted\nper-CPU sequence is not marked in lowcore and the exception return\npath cannot repair the per-CPU address register after migration.\n\nAll MVIY_PERCPU() callers pass C string literals. Use them directly\nand separate the assembler macro arguments with an explicit comma. The\nresulting invocation is:\n\n  GEN_MVIY 459712, %r3\n\nThis form is unambiguous for GNU as and LLVM\u0027s integrated assembler.\nThis behavior was fixed in GNU as from binutils 2.39, but Linux\nsupports binutils 2.30."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The omitted mviy start marker is in s390 this_cpu_read/write/add sequences reached from local syscalls (mm/swap, memcg, vmalloc) and user-namespace nftables; this is an arch per-CPU primitive, not a packet parser, ksmbd/nfsd handler, or USB path.\nAC:H - The op is wrong only if an interrupt or preemption and a CPU migration both occur after AG adds the old CPU offset and before the atomic instruction; that one-instruction window is not attacker-timed, even with affinity bouncing on default PREEMPT_LAZY s390.\nPR:L - Any unprivileged local user can drive this_cpu_* via ordinary syscalls, and nft_ct\u0027s this_cpu_read(nft_ct_pcpu_template) is reachable with CAP_NET_ADMIN in a user namespace; init-namespace root is not required.\nUI:N - The attacker triggers the unmarked this_cpu sequences from their own process (syscalls or locally generated packets); no victim mount, file open, or other interaction is required.\nS:U - Stale per-CPU pointers are used inside the same host kernel after migration; this is not a KVM/Xen guest-to-host escape or IOMMU/DMA boundary bypass.\nC:H - After migration, this_cpu_read uses another CPU\u0027s pointer-typed slots (percpu_swap_cluster.si, nft_ct_pcpu_template, page-pool/socket pointers) without that CPU\u0027s locking, which can disclose kernel objects and is memory corruption leverageable for info disclosure.\nI:H - The matching this_cpu_write/add then mutates the previous CPU\u0027s per-CPU state (swap cluster cache, conntrack templates, other CPU-local structures that assume exclusive access), which is kernel memory corruption exploitable toward control-flow hijack.\nA:H - A stale per-CPU pointer after migration can oops or panic (NULL vmalloc ne_fit_preload_node, inconsistent swap_info, conntrack refcount UAF), which is a full kernel availability loss on SMP s390."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-13T06:29:33.766Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/91770b08a120967077ae78600612f18bc5ee3caf"
        },
        {
          "url": "https://git.kernel.org/stable/c/101782f8945a125044347312d74d488c05741c4a"
        }
      ],
      "title": "s390/percpu: Fix MVIY_PERCPU() with older binutils",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89459",
    "datePublished": "2026-09-11T19:43:22.007Z",
    "dateReserved": "2026-09-11T19:38:34.707Z",
    "dateUpdated": "2026-09-13T06:29:33.766Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89459",
      "date": "2026-09-15",
      "epss": "0.00108",
      "percentile": "0.01342"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-89459\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-09-11T20:19:26.780\",\"lastModified\":\"2026-09-13T07:17:09.733\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\ns390/percpu: Fix MVIY_PERCPU() with older binutils\\n\\nCommit a737737cdb9c (\\\"s390/percpu: Infrastructure for more efficient\\nthis_cpu operations\\\") introduced MVIY_PERCPU(), which stringifies\\narguments that are already C string literals. This generates an\\nassembler macro invocation with whitespace-separated quoted arguments:\\n\\n  GEN_MVIY \\\"459712\\\" \\\"%r3\\\"\\n\\nGNU as versions prior to binutils 2.39 drop the separating whitespace\\nbetween quoted macro arguments during input scrubbing. They\\nconsequently parse the invocation as a single argument and emit\\nrepeated warnings:\\n\\n  Warning: missing closing `\\\"\u0027\\n\\nThe .ifc in GEN_MVIY never matches and GNU as exits successfully\\nwithout emitting the mviy instruction. As a result, the interrupted\\nper-CPU sequence is not marked in lowcore and the exception return\\npath cannot repair the per-CPU address register after migration.\\n\\nAll MVIY_PERCPU() callers pass C string literals. Use them directly\\nand separate the assembler macro arguments with an explicit comma. The\\nresulting invocation is:\\n\\n  GEN_MVIY 459712, %r3\\n\\nThis form is unambiguous for GNU as and LLVM\u0027s integrated assembler.\\nThis behavior was fixed in GNU as from binutils 2.39, but Linux\\nsupports binutils 2.30.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"arch/s390/include/asm/percpu.h\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"a737737cdb9c94e40a9926cdc2320f874c05d709\",\"lessThan\":\"91770b08a120967077ae78600612f18bc5ee3caf\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"a737737cdb9c94e40a9926cdc2320f874c05d709\",\"lessThan\":\"101782f8945a125044347312d74d488c05741c4a\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"arch/s390/include/asm/percpu.h\"],\"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:H/PR:L/UI:N/S:U/C:H/I:H/A:H\",\"baseScore\":7.0,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"HIGH\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.0,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/101782f8945a125044347312d74d488c05741c4a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/91770b08a120967077ae78600612f18bc5ee3caf\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-09-15T10:31:23+00:00",
      "cve": "CVE-2026-89459",
      "id": "CVE-2026-89459",
      "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: s390/percpu: Fix MVIY_PERCPU() with older binutils",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89459.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-15T00:59:06Z",
      "cve": "CVE-2026-89459",
      "id": "CVE-2026-89459",
      "initial_release_date": "2026-09-12T16:28:09Z",
      "product_status:known_not_affected": "353",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-89459",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-89459.json",
      "version": "4"
    }
  }
}



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…

Loading…