CVE-2026-93147 (GCVE-0-2026-93147)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:11 – Updated: 2026-09-18 17:56
VLAI
Title
s390/bpf: Replace ly instruction with llgf
Summary
In the Linux kernel, the following vulnerability has been resolved: s390/bpf: Replace ly instruction with llgf cpu_nr is a 32 bit value and BPF_REG_0 is a 64 bit register, when ly loads the cpu_nr into BPF_REG_0 it does not zero the upper bits, but llgf does.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 9012cf2491e3c5d28d098b0d6da804af82977032 , < 88500a86ab79f01c568de6ed00f5b1c5c79f11d5 (git)
Affected: 9012cf2491e3c5d28d098b0d6da804af82977032 , < 5f6cc299938b561cb01e343bab7042611fcee12a (git)
guessed Create a notification for this product.
Linux Linux Affected: 7.2
Unaffected: 0 , < 7.2 (semver)
Unaffected: 7.2.6 , ≤ 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/net/bpf_jit_comp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "88500a86ab79f01c568de6ed00f5b1c5c79f11d5",
              "status": "affected",
              "version": "9012cf2491e3c5d28d098b0d6da804af82977032",
              "versionType": "git"
            },
            {
              "lessThan": "5f6cc299938b561cb01e343bab7042611fcee12a",
              "status": "affected",
              "version": "9012cf2491e3c5d28d098b0d6da804af82977032",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/s390/net/bpf_jit_comp.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.6",
              "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.6",
                  "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/bpf: Replace ly instruction with llgf\n\ncpu_nr is a 32 bit value and BPF_REG_0 is a 64 bit register, when ly loads\nthe cpu_nr into BPF_REG_0 it does not zero the upper bits, but llgf does."
        }
      ],
      "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 malformed input is eBPF bytecode containing BPF_JMP|BPF_CALL with imm=BPF_FUNC_get_smp_processor_id, loaded via bpf_prog_load() (bpf(2) BPF_PROG_LOAD). s390 bpf_jit_insn() then inlines that call as LY from get_lowcore()-\u003ecpu_nr; no remote protocol carries this bytecode.\nAC:L - The attacker sets BPF_REG_0 (s390 %r14) with BPF_LD_IMM64, then emits the helper call; bpf_jit_insn() always compiles it to LY (E358), which writes only bits 32-63 and leaves the attacker-chosen high half intact. bpf_opt_remove_dead_code() does not delete that store, and there is no race.\nPR:L - bpf_prog_load() allows BPF_PROG_TYPE_SOCKET_FILTER; sk_filter_func_proto() reaches bpf_base_func_proto(), which returns bpf_get_raw_smp_processor_id_proto for BPF_FUNC_get_smp_processor_id before its CAP_BPF gate, and BPF_MAP_TYPE_ARRAY is an unprivileged map. CAP_BPF is also granted by bpf_token_capable() in a delegated user namespace.\nUI:N - The attacker loads the crafted program with bpf(BPF_PROG_LOAD) and executes it themselves via BPF_PROG_TEST_RUN (sk_filter_prog_ops.test_run = bpf_prog_test_run_skb) or SO_ATTACH_BPF on their own socket; no other user must mount, open, or otherwise act.\nS:U - LY leaving stale high bits in BPF_REG_0 lets the JITed program read and write the host kernel through a verifier-approved PTR_TO_MAP_VALUE. That stays inside the same kernel authority; it is not a KVM guest-to-host or IOMMU bypass.\nC:H - do_refine_retval_range() sets R0\u2019s 64-bit range to [0, nr_cpu_ids-1] after BPF_FUNC_get_smp_processor_id, so check_map_access() allows adding it to a map-value pointer. LY preserves attacker high bits, so the subsequent BPF_LDX reads kernel memory far outside the map.\nI:H - The same forged pointer is a BPF_STX destination: the store lands at map_value + ((old_r0 \u0026 0xFFFFFFFF00000000) | cpu_nr). That is an attacker-controlled kernel write usable for corruption and control-flow hijack.\nA:H - Using that out-of-bounds map-value pointer (map_value plus the uncleared high 32 bits of %r14 after LY of cpu_nr) faults on unmapped addresses and oopses or panics the kernel."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:56:12.784Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/88500a86ab79f01c568de6ed00f5b1c5c79f11d5"
        },
        {
          "url": "https://git.kernel.org/stable/c/5f6cc299938b561cb01e343bab7042611fcee12a"
        }
      ],
      "title": "s390/bpf: Replace ly instruction with llgf",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-93147",
    "datePublished": "2026-09-17T16:11:44.793Z",
    "dateReserved": "2026-09-17T16:02:15.088Z",
    "dateUpdated": "2026-09-18T17:56:12.784Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-93147",
      "date": "2026-09-29",
      "epss": "0.00165",
      "percentile": "0.05098"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "arch/s390/net/bpf_jit_comp.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "88500a86ab79f01c568de6ed00f5b1c5c79f11d5",
                    "status": "affected",
                    "version": "9012cf2491e3c5d28d098b0d6da804af82977032",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "5f6cc299938b561cb01e343bab7042611fcee12a",
                    "status": "affected",
                    "version": "9012cf2491e3c5d28d098b0d6da804af82977032",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "arch/s390/net/bpf_jit_comp.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.6",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc1",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ns390/bpf: Replace ly instruction with llgf\n\ncpu_nr is a 32 bit value and BPF_REG_0 is a 64 bit register, when ly loads\nthe cpu_nr into BPF_REG_0 it does not zero the upper bits, but llgf does."
          }
        ],
        "id": "CVE-2026-93147",
        "lastModified": "2026-09-18T18:18:22.650",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:18:09.867",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/5f6cc299938b561cb01e343bab7042611fcee12a"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/88500a86ab79f01c568de6ed00f5b1c5c79f11d5"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-22T16:24:03Z",
      "cve": "CVE-2026-93147",
      "id": "CVE-2026-93147",
      "initial_release_date": "2026-09-22T16:24:03Z",
      "product_status:known_not_affected": "347",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-93147",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-93147.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…

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…