CVE-2026-90184 (GCVE-0-2026-90184)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:07 – Updated: 2026-09-17 16:07
VLAI
Title
null_blk: serialize configfs attribute updates with device setup
Summary
In the Linux kernel, the following vulnerability has been resolved: null_blk: serialize configfs attribute updates with device setup The attribute store methods generated with NULLB_DEVICE_ATTR() refuse to change the configuration of a live device by testing NULLB_DEV_FL_CONFIGURED, but that flag is only set by nullb_device_power_store() after null_add_dev() has returned, and the store methods take no lock at all. configfs only serializes writes to the same open file (buffer->mutex), so a write to any attribute can run concurrently with null_add_dev() and change the device configuration while it is being used. null_add_dev() reads the configuration several times, e.g. dev->zoned is read once to set up the queue limits and once to initialize the zone resources: CPU0: echo 1 > nullb0/power CPU1: echo 1 > nullb0/zoned nullb_device_power_store() mutex_lock(&lock) null_add_dev() if (dev->zoned) -> false /* no BLK_FEAT_ZONED */ nullb_device_zoned_store() test_bit(FL_CONFIGURED) -> 0 dev->zoned = true blk_mq_alloc_disk() /* queue is not zoned */ if (nullb->dev->zoned) -> true null_register_zoned_dev() blk_revalidate_disk_zones() blk_revalidate_disk_zones() is then called for a queue that does not have BLK_FEAT_ZONED set, which triggers its WARN_ON_ONCE() and fails the device setup with -EIO: WARNING: CPU: 2 PID: 322 at block/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c/0x560 Clearing dev->zoned in the same window is worse: the queue is created with BLK_FEAT_ZONED but the zone resources are never initialized, so add_disk() succeeds for a zoned disk that has no zones. And a store that lands after the last dev->zoned test leaves dev->zoned set while dev->zones is still NULL, which null_process_zoned_cmd() dereferences on the first write. Fix this by taking the global lock, which nullb_device_power_store() already holds across null_add_dev() and null_del_dev(), around both the NULLB_DEV_FL_CONFIGURED test and the update of the device configuration. The submit_queues and poll_queues apply callbacks are now called with that lock held, so remove the locking they did themselves. Since the store methods can run as soon as configfs_register_subsystem() returns, that is, before null_init() gets to mutex_init(&lock), also initialize the lock statically with DEFINE_MUTEX().
Severity
No CVSS data available.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < 6352e7ead2d8111802a554eeb94886f5a9894bb9 (git)
Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < 7de792b4c48fba02a36a8077032f7d5093c925e5 (git)
Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < aed8af338a09a64d63b068a803c4ecfc5701dd4c (git)
Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < 32456a85995579e56c60cc53c357cda75a9d4f7c (git)
Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < d3d35dd045a35991bf6fd13de5f293e6dd7bf3b3 (git)
Affected: 3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa , < 4e1f23f9c33c156be7e313b40695af5a3a834739 (git)
guessed Create a notification for this product.
Linux Linux Affected: 4.14
Unaffected: 0 , < 4.14 (semver)
Unaffected: 6.1.188 , ≤ 6.1.* (semver)
Unaffected: 6.6.157 , ≤ 6.6.* (semver)
Unaffected: 6.12.110 , ≤ 6.12.* (semver)
Unaffected: 6.18.52 , ≤ 6.18.* (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": [
            "drivers/block/null_blk/main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6352e7ead2d8111802a554eeb94886f5a9894bb9",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            },
            {
              "lessThan": "7de792b4c48fba02a36a8077032f7d5093c925e5",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            },
            {
              "lessThan": "aed8af338a09a64d63b068a803c4ecfc5701dd4c",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            },
            {
              "lessThan": "32456a85995579e56c60cc53c357cda75a9d4f7c",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            },
            {
              "lessThan": "d3d35dd045a35991bf6fd13de5f293e6dd7bf3b3",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            },
            {
              "lessThan": "4e1f23f9c33c156be7e313b40695af5a3a834739",
              "status": "affected",
              "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/block/null_blk/main.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.14"
            },
            {
              "lessThan": "4.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.188",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.157",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.110",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.52",
              "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": "6.1.188",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.157",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.110",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.52",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "4.14",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnull_blk: serialize configfs attribute updates with device setup\n\nThe attribute store methods generated with NULLB_DEVICE_ATTR() refuse to\nchange the configuration of a live device by testing\nNULLB_DEV_FL_CONFIGURED, but that flag is only set by\nnullb_device_power_store() after null_add_dev() has returned, and the\nstore methods take no lock at all. configfs only serializes writes to\nthe same open file (buffer-\u003emutex), so a write to any attribute can run\nconcurrently with null_add_dev() and change the device configuration\nwhile it is being used.\n\nnull_add_dev() reads the configuration several times, e.g. dev-\u003ezoned is\nread once to set up the queue limits and once to initialize the zone\nresources:\n\n  CPU0: echo 1 \u003e nullb0/power         CPU1: echo 1 \u003e nullb0/zoned\n  nullb_device_power_store()\n    mutex_lock(\u0026lock)\n    null_add_dev()\n      if (dev-\u003ezoned) -\u003e false\n        /* no BLK_FEAT_ZONED */       nullb_device_zoned_store()\n                                        test_bit(FL_CONFIGURED) -\u003e 0\n                                        dev-\u003ezoned = true\n      blk_mq_alloc_disk()\n        /* queue is not zoned */\n      if (nullb-\u003edev-\u003ezoned) -\u003e true\n        null_register_zoned_dev()\n          blk_revalidate_disk_zones()\n\nblk_revalidate_disk_zones() is then called for a queue that does not\nhave BLK_FEAT_ZONED set, which triggers its WARN_ON_ONCE() and fails the\ndevice setup with -EIO:\n\n  WARNING: CPU: 2 PID: 322 at block/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c/0x560\n\nClearing dev-\u003ezoned in the same window is worse: the queue is created\nwith BLK_FEAT_ZONED but the zone resources are never initialized, so\nadd_disk() succeeds for a zoned disk that has no zones. And a store that\nlands after the last dev-\u003ezoned test leaves dev-\u003ezoned set while\ndev-\u003ezones is still NULL, which null_process_zoned_cmd() dereferences on\nthe first write.\n\nFix this by taking the global lock, which nullb_device_power_store()\nalready holds across null_add_dev() and null_del_dev(), around both the\nNULLB_DEV_FL_CONFIGURED test and the update of the device configuration.\nThe submit_queues and poll_queues apply callbacks are now called with\nthat lock held, so remove the locking they did themselves.\n\nSince the store methods can run as soon as configfs_register_subsystem()\nreturns, that is, before null_init() gets to mutex_init(\u0026lock), also\ninitialize the lock statically with DEFINE_MUTEX()."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-17T16:07:07.728Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/6352e7ead2d8111802a554eeb94886f5a9894bb9"
        },
        {
          "url": "https://git.kernel.org/stable/c/7de792b4c48fba02a36a8077032f7d5093c925e5"
        },
        {
          "url": "https://git.kernel.org/stable/c/aed8af338a09a64d63b068a803c4ecfc5701dd4c"
        },
        {
          "url": "https://git.kernel.org/stable/c/32456a85995579e56c60cc53c357cda75a9d4f7c"
        },
        {
          "url": "https://git.kernel.org/stable/c/d3d35dd045a35991bf6fd13de5f293e6dd7bf3b3"
        },
        {
          "url": "https://git.kernel.org/stable/c/4e1f23f9c33c156be7e313b40695af5a3a834739"
        }
      ],
      "title": "null_blk: serialize configfs attribute updates with device setup",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-90184",
    "datePublished": "2026-09-17T16:07:07.728Z",
    "dateReserved": "2026-09-11T19:38:34.791Z",
    "dateUpdated": "2026-09-17T16:07:07.728Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-90184",
      "date": "2026-09-29",
      "epss": "0.00205",
      "percentile": "0.09453"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-23T02:01:24.000Z",
      "cve": "CVE-2026-90184",
      "id": "msrc_CVE-2026-90184",
      "initial_release_date": "2026-09-19T01:14:16.000Z",
      "product_status:known_affected": "2",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "null_blk: serialize configfs attribute updates with device setup",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-90184.json",
      "version": "2"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/block/null_blk/main.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "6352e7ead2d8111802a554eeb94886f5a9894bb9",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "7de792b4c48fba02a36a8077032f7d5093c925e5",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "aed8af338a09a64d63b068a803c4ecfc5701dd4c",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "32456a85995579e56c60cc53c357cda75a9d4f7c",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "d3d35dd045a35991bf6fd13de5f293e6dd7bf3b3",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "4e1f23f9c33c156be7e313b40695af5a3a834739",
                    "status": "affected",
                    "version": "3bf2bd20734e3e6ffda53719a9c10fb3ee9c5ffa",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/block/null_blk/main.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "4.14"
                  },
                  {
                    "lessThan": "4.14",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.188",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.157",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.110",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.52",
                    "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\nnull_blk: serialize configfs attribute updates with device setup\n\nThe attribute store methods generated with NULLB_DEVICE_ATTR() refuse to\nchange the configuration of a live device by testing\nNULLB_DEV_FL_CONFIGURED, but that flag is only set by\nnullb_device_power_store() after null_add_dev() has returned, and the\nstore methods take no lock at all. configfs only serializes writes to\nthe same open file (buffer-\u003emutex), so a write to any attribute can run\nconcurrently with null_add_dev() and change the device configuration\nwhile it is being used.\n\nnull_add_dev() reads the configuration several times, e.g. dev-\u003ezoned is\nread once to set up the queue limits and once to initialize the zone\nresources:\n\n  CPU0: echo 1 \u003e nullb0/power         CPU1: echo 1 \u003e nullb0/zoned\n  nullb_device_power_store()\n    mutex_lock(\u0026lock)\n    null_add_dev()\n      if (dev-\u003ezoned) -\u003e false\n        /* no BLK_FEAT_ZONED */       nullb_device_zoned_store()\n                                        test_bit(FL_CONFIGURED) -\u003e 0\n                                        dev-\u003ezoned = true\n      blk_mq_alloc_disk()\n        /* queue is not zoned */\n      if (nullb-\u003edev-\u003ezoned) -\u003e true\n        null_register_zoned_dev()\n          blk_revalidate_disk_zones()\n\nblk_revalidate_disk_zones() is then called for a queue that does not\nhave BLK_FEAT_ZONED set, which triggers its WARN_ON_ONCE() and fails the\ndevice setup with -EIO:\n\n  WARNING: CPU: 2 PID: 322 at block/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c/0x560\n\nClearing dev-\u003ezoned in the same window is worse: the queue is created\nwith BLK_FEAT_ZONED but the zone resources are never initialized, so\nadd_disk() succeeds for a zoned disk that has no zones. And a store that\nlands after the last dev-\u003ezoned test leaves dev-\u003ezoned set while\ndev-\u003ezones is still NULL, which null_process_zoned_cmd() dereferences on\nthe first write.\n\nFix this by taking the global lock, which nullb_device_power_store()\nalready holds across null_add_dev() and null_del_dev(), around both the\nNULLB_DEV_FL_CONFIGURED test and the update of the device configuration.\nThe submit_queues and poll_queues apply callbacks are now called with\nthat lock held, so remove the locking they did themselves.\n\nSince the store methods can run as soon as configfs_register_subsystem()\nreturns, that is, before null_init() gets to mutex_init(\u0026lock), also\ninitialize the lock statically with DEFINE_MUTEX()."
          }
        ],
        "id": "CVE-2026-90184",
        "lastModified": "2026-09-17T17:17:12.833",
        "metrics": {},
        "published": "2026-09-17T17:17:12.833",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/32456a85995579e56c60cc53c357cda75a9d4f7c"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/4e1f23f9c33c156be7e313b40695af5a3a834739"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/6352e7ead2d8111802a554eeb94886f5a9894bb9"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/7de792b4c48fba02a36a8077032f7d5093c925e5"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/aed8af338a09a64d63b068a803c4ecfc5701dd4c"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/d3d35dd045a35991bf6fd13de5f293e6dd7bf3b3"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-22T16:29:59Z",
      "cve": "CVE-2026-90184",
      "id": "CVE-2026-90184",
      "initial_release_date": "2026-09-22T16:29:59Z",
      "product_status:known_affected": "341",
      "product_status:known_not_affected": "6",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-90184",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-90184.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…