CVE-2023-53515 (GCVE-0-2023-53515)
Vulnerability from cvelistv5
Published
2025-10-01 11:46
Modified
2025-10-01 11:46
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: virtio-mmio: don't break lifecycle of vm_dev vm_dev has a separate lifecycle because it has a 'struct device' embedded. Thus, having a release callback for it is correct. Allocating the vm_dev struct with devres totally breaks this protection, though. Instead of waiting for the vm_dev release callback, the memory is freed when the platform_device is removed. Resulting in a use-after-free when finally the callback is to be called. To easily see the problem, compile the kernel with CONFIG_DEBUG_KOBJECT_RELEASE and unbind with sysfs. The fix is easy, don't use devres in this case. Found during my research about object lifetime problems.
Impacted products
Vendor Product Version
Linux Linux Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Version: 7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5
Create a notification for this product.
   Linux Linux Version: 4.15
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/virtio/virtio_mmio.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "97a2d55ead76358245b446efd87818e919196d7a",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "b788ad3b2468512339c05f23692e36860264e674",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "3ff54d904fafabd0912796785e53cce4e69ca123",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "5b7d5c2dd664eb8b9a06ecbc06e28d39359c422e",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "af5818c35173e096085c6ae2e3aac605d3d15e41",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "2dcb368fe5a8eee498ca75c93a18ce2f3b0d6a8e",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            },
            {
              "lessThan": "55c91fedd03d7b9cf0c5199b2eb12b9b8e95281a",
              "status": "affected",
              "version": "7eb781b1bbb7136fe78fb8c28c1c223c61fa32b5",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/virtio/virtio_mmio.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.15"
            },
            {
              "lessThan": "4.15",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "4.19.*",
              "status": "unaffected",
              "version": "4.19.293",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.4.*",
              "status": "unaffected",
              "version": "5.4.255",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.192",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.128",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.47",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.4.*",
              "status": "unaffected",
              "version": "6.4.12",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.5",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "4.19.293",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.4.255",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.192",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.128",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.47",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.4.12",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.5",
                  "versionStartIncluding": "4.15",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nvirtio-mmio: don\u0027t break lifecycle of vm_dev\n\nvm_dev has a separate lifecycle because it has a \u0027struct device\u0027\nembedded. Thus, having a release callback for it is correct.\n\nAllocating the vm_dev struct with devres totally breaks this protection,\nthough. Instead of waiting for the vm_dev release callback, the memory\nis freed when the platform_device is removed. Resulting in a\nuse-after-free when finally the callback is to be called.\n\nTo easily see the problem, compile the kernel with\nCONFIG_DEBUG_KOBJECT_RELEASE and unbind with sysfs.\n\nThe fix is easy, don\u0027t use devres in this case.\n\nFound during my research about object lifetime problems."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2025-10-01T11:46:03.192Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/97a2d55ead76358245b446efd87818e919196d7a"
        },
        {
          "url": "https://git.kernel.org/stable/c/b788ad3b2468512339c05f23692e36860264e674"
        },
        {
          "url": "https://git.kernel.org/stable/c/3ff54d904fafabd0912796785e53cce4e69ca123"
        },
        {
          "url": "https://git.kernel.org/stable/c/5b7d5c2dd664eb8b9a06ecbc06e28d39359c422e"
        },
        {
          "url": "https://git.kernel.org/stable/c/af5818c35173e096085c6ae2e3aac605d3d15e41"
        },
        {
          "url": "https://git.kernel.org/stable/c/2dcb368fe5a8eee498ca75c93a18ce2f3b0d6a8e"
        },
        {
          "url": "https://git.kernel.org/stable/c/55c91fedd03d7b9cf0c5199b2eb12b9b8e95281a"
        }
      ],
      "title": "virtio-mmio: don\u0027t break lifecycle of vm_dev",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2023-53515",
    "datePublished": "2025-10-01T11:46:03.192Z",
    "dateReserved": "2025-10-01T11:39:39.406Z",
    "dateUpdated": "2025-10-01T11:46:03.192Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2023-53515\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-10-01T12:15:55.583\",\"lastModified\":\"2025-10-02T19:11:46.753\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nvirtio-mmio: don\u0027t break lifecycle of vm_dev\\n\\nvm_dev has a separate lifecycle because it has a \u0027struct device\u0027\\nembedded. Thus, having a release callback for it is correct.\\n\\nAllocating the vm_dev struct with devres totally breaks this protection,\\nthough. Instead of waiting for the vm_dev release callback, the memory\\nis freed when the platform_device is removed. Resulting in a\\nuse-after-free when finally the callback is to be called.\\n\\nTo easily see the problem, compile the kernel with\\nCONFIG_DEBUG_KOBJECT_RELEASE and unbind with sysfs.\\n\\nThe fix is easy, don\u0027t use devres in this case.\\n\\nFound during my research about object lifetime problems.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/2dcb368fe5a8eee498ca75c93a18ce2f3b0d6a8e\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/3ff54d904fafabd0912796785e53cce4e69ca123\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/55c91fedd03d7b9cf0c5199b2eb12b9b8e95281a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/5b7d5c2dd664eb8b9a06ecbc06e28d39359c422e\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/97a2d55ead76358245b446efd87818e919196d7a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/af5818c35173e096085c6ae2e3aac605d3d15e41\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b788ad3b2468512339c05f23692e36860264e674\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
  }
}


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.
  • 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…