CVE-2026-74670 (GCVE-0-2026-74670)
Vulnerability from cvelistv5
Published
2026-08-22 15:32
Modified
2026-08-25 05:41
Summary
In the Linux kernel, the following vulnerability has been resolved: ipvs: stop estimator after disabled calc phase IPVS estimator kthread 0 starts with zeroed chain and tick limits until its initial calculation phase completes. If network namespace teardown clears ipvs->enable during that phase, ip_vs_est_calc_phase() can return without installing positive limits. The kthread can then continue into its main loop and drain est_temp_list with zero chain_max, tick_max and est_max_count values. Each enqueue consumes one available tick row, but est_count never reaches the zero est_max_count value. After all rows are consumed, the row lookup returns IPVS_EST_NTICKS and ip_vs_enqueue_estimator() writes past the ticks and tick_len arrays. Exit kthread 0 after the calculation phase if the kthread is stopping or IPVS has been disabled. That keeps temporary estimators from being drained after the limits failed to initialize. Estimator kthreads can now self-exit before teardown or reload stops kd->task. Keep an extra task reference after creation and release it with kthread_stop_put(), so kd->task remains valid until the stop paths consume that reference.
Impacted products
Vendor Product Version
Linux Linux Version: 705dd34440812735ece298eb5bc153fde9544d42
Version: 705dd34440812735ece298eb5bc153fde9544d42
Version: 705dd34440812735ece298eb5bc153fde9544d42
Version: 705dd34440812735ece298eb5bc153fde9544d42
Version: 705dd34440812735ece298eb5bc153fde9544d42
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/netfilter/ipvs/ip_vs_est.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "d5122a2b2601145975d387006e517c56896e310e",
              "status": "affected",
              "version": "705dd34440812735ece298eb5bc153fde9544d42",
              "versionType": "git"
            },
            {
              "lessThan": "de98dc5ef94b83bbb444c670c253ea02ca0f5e43",
              "status": "affected",
              "version": "705dd34440812735ece298eb5bc153fde9544d42",
              "versionType": "git"
            },
            {
              "lessThan": "e7f34f29b330265d456943bf0b984dcecfcef9af",
              "status": "affected",
              "version": "705dd34440812735ece298eb5bc153fde9544d42",
              "versionType": "git"
            },
            {
              "lessThan": "2335dedc1922dfa889ca1f9f70370924e8e79a08",
              "status": "affected",
              "version": "705dd34440812735ece298eb5bc153fde9544d42",
              "versionType": "git"
            },
            {
              "lessThan": "558f67f1340f803a346ecd14a69c49653111c5f4",
              "status": "affected",
              "version": "705dd34440812735ece298eb5bc153fde9544d42",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/netfilter/ipvs/ip_vs_est.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.2"
            },
            {
              "lessThan": "6.2",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.152",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.104",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.45",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.9",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.152",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.104",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.45",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.9",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "6.2",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nipvs: stop estimator after disabled calc phase\n\nIPVS estimator kthread 0 starts with zeroed chain and tick limits until\nits initial calculation phase completes. If network namespace teardown\nclears ipvs-\u003eenable during that phase, ip_vs_est_calc_phase() can return\nwithout installing positive limits.\n\nThe kthread can then continue into its main loop and drain\nest_temp_list with zero chain_max, tick_max and est_max_count values.\nEach enqueue consumes one available tick row, but est_count never\nreaches the zero est_max_count value. After all rows are consumed, the\nrow lookup returns IPVS_EST_NTICKS and ip_vs_enqueue_estimator() writes\npast the ticks and tick_len arrays.\n\nExit kthread 0 after the calculation phase if the kthread is stopping or\nIPVS has been disabled. That keeps temporary estimators from being\ndrained after the limits failed to initialize.\n\nEstimator kthreads can now self-exit before teardown or reload stops\nkd-\u003etask. Keep an extra task reference after creation and release it\nwith kthread_stop_put(), so kd-\u003etask remains valid until the stop paths\nconsume that reference."
        }
      ],
      "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 - Exploitation requires local IPVS configuration via netlink or setsockopt (GENL_ADMIN_PERM/CAP_NET_ADMIN); the bug is in estimator kthread management during namespace teardown, not in remote packet handling.\nAC:L - The attacker controls both sides of the race by creating a network namespace, adding many IPVS services to populate est_temp_list, and tearing down the namespace during kthread 0\u0027s calc phase.\nPR:L - Triggering IPVS service creation and namespace teardown requires CAP_NET_ADMIN, which unprivileged users can obtain in user+network namespaces via unshare on systems with unprivileged user namespaces enabled.\nUI:N - No victim interaction is required; an attacker can script IPVS service creation and namespace destruction without any action from another user or administrator.\nS:U - The out-of-bounds write corrupts kernel heap memory within the same kernel security boundary; impact is local privilege escalation or denial of service, not a cross-boundary escape.\nC:H - Out-of-bounds writes past ticks[] and tick_len[] corrupt adjacent heap metadata and kernel structures, providing a memory corruption primitive that can be leveraged for arbitrary kernel memory disclosure.\nI:H - Writing past the fixed-size ticks[] and tick_len[] arrays enables heap corruption that can overwrite function pointers or adjacent objects, supporting arbitrary kernel write and potential code execution.\nA:H - Heap corruption from unbounded index writes in ip_vs_enqueue_estimator() can cause kernel oops, panic, or hang when processing estimators after failed calc-phase initialization."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-25T05:41:25.343Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/d5122a2b2601145975d387006e517c56896e310e"
        },
        {
          "url": "https://git.kernel.org/stable/c/de98dc5ef94b83bbb444c670c253ea02ca0f5e43"
        },
        {
          "url": "https://git.kernel.org/stable/c/e7f34f29b330265d456943bf0b984dcecfcef9af"
        },
        {
          "url": "https://git.kernel.org/stable/c/2335dedc1922dfa889ca1f9f70370924e8e79a08"
        },
        {
          "url": "https://git.kernel.org/stable/c/558f67f1340f803a346ecd14a69c49653111c5f4"
        }
      ],
      "title": "ipvs: stop estimator after disabled calc phase",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74670",
    "datePublished": "2026-08-22T15:32:40.850Z",
    "dateReserved": "2026-08-15T05:44:03.925Z",
    "dateUpdated": "2026-08-25T05:41:25.343Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…