cve-2024-36895
Vulnerability from cvelistv5
Published
2024-05-30 15:29
Modified
2024-12-19 09:01
Severity ?
Summary
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: uvc: use correct buffer size when parsing configfs lists This commit fixes uvc gadget support on 32-bit platforms. Commit 0df28607c5cb ("usb: gadget: uvc: Generalise helper functions for reuse") introduced a helper function __uvcg_iter_item_entries() to aid with parsing lists of items on configfs attributes stores. This function is a generalization of another very similar function, which used a stack-allocated temporary buffer of fixed size for each item in the list and used the sizeof() operator to check for potential buffer overruns. The new function was changed to allocate the now variably sized temp buffer on heap, but wasn't properly updated to also check for max buffer size using the computed size instead of sizeof() operator. As a result, the maximum item size was 7 (plus null terminator) on 64-bit platforms, and 3 on 32-bit ones. While 7 is accidentally just barely enough, 3 is definitely too small for some of UVC configfs attributes. For example, dwFrameInteval, specified in 100ns units, usually has 6-digit item values, e.g. 166666 for 60fps.
Impacted products
Vendor Product Version
Linux Linux Version: 6.3
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2024-36895",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2024-06-06T17:55:25.494467Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2024-06-06T17:55:31.171Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      },
      {
        "providerMetadata": {
          "dateUpdated": "2024-08-02T03:43:49.849Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/7a54e5052bde582fd0e7677334fe7a5be92e242c"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/a422089ce42ced73713e5032aad29a9a7cbe9528"
          },
          {
            "tags": [
              "x_transferred"
            ],
            "url": "https://git.kernel.org/stable/c/650ae71c80749fc7cb8858c8049f532eaec64410"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/usb/gadget/function/uvc_configfs.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "7a54e5052bde582fd0e7677334fe7a5be92e242c",
              "status": "affected",
              "version": "0df28607c5cb4fe60bba591e9858a8f7ba39aa4a",
              "versionType": "git"
            },
            {
              "lessThan": "a422089ce42ced73713e5032aad29a9a7cbe9528",
              "status": "affected",
              "version": "0df28607c5cb4fe60bba591e9858a8f7ba39aa4a",
              "versionType": "git"
            },
            {
              "lessThan": "650ae71c80749fc7cb8858c8049f532eaec64410",
              "status": "affected",
              "version": "0df28607c5cb4fe60bba591e9858a8f7ba39aa4a",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/usb/gadget/function/uvc_configfs.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.3"
            },
            {
              "lessThan": "6.3",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.31",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.8.*",
              "status": "unaffected",
              "version": "6.8.10",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.9",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: uvc: use correct buffer size when parsing configfs lists\n\nThis commit fixes uvc gadget support on 32-bit platforms.\n\nCommit 0df28607c5cb (\"usb: gadget: uvc: Generalise helper functions for\nreuse\") introduced a helper function __uvcg_iter_item_entries() to aid\nwith parsing lists of items on configfs attributes stores. This function\nis a generalization of another very similar function, which used a\nstack-allocated temporary buffer of fixed size for each item in the list\nand used the sizeof() operator to check for potential buffer overruns.\nThe new function was changed to allocate the now variably sized temp\nbuffer on heap, but wasn\u0027t properly updated to also check for max buffer\nsize using the computed size instead of sizeof() operator.\n\nAs a result, the maximum item size was 7 (plus null terminator) on\n64-bit platforms, and 3 on 32-bit ones. While 7 is accidentally just\nbarely enough, 3 is definitely too small for some of UVC configfs\nattributes. For example, dwFrameInteval, specified in 100ns units,\nusually has 6-digit item values, e.g. 166666 for 60fps."
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2024-12-19T09:01:34.186Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/7a54e5052bde582fd0e7677334fe7a5be92e242c"
        },
        {
          "url": "https://git.kernel.org/stable/c/a422089ce42ced73713e5032aad29a9a7cbe9528"
        },
        {
          "url": "https://git.kernel.org/stable/c/650ae71c80749fc7cb8858c8049f532eaec64410"
        }
      ],
      "title": "usb: gadget: uvc: use correct buffer size when parsing configfs lists",
      "x_generator": {
        "engine": "bippy-5f407fcff5a0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2024-36895",
    "datePublished": "2024-05-30T15:29:00.265Z",
    "dateReserved": "2024-05-30T15:25:07.066Z",
    "dateUpdated": "2024-12-19T09:01:34.186Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.1",
  "vulnerability-lookup:meta": {
    "nvd": "{\"cve\":{\"id\":\"CVE-2024-36895\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2024-05-30T16:15:12.937\",\"lastModified\":\"2024-11-21T09:22:45.450\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nusb: gadget: uvc: use correct buffer size when parsing configfs lists\\n\\nThis commit fixes uvc gadget support on 32-bit platforms.\\n\\nCommit 0df28607c5cb (\\\"usb: gadget: uvc: Generalise helper functions for\\nreuse\\\") introduced a helper function __uvcg_iter_item_entries() to aid\\nwith parsing lists of items on configfs attributes stores. This function\\nis a generalization of another very similar function, which used a\\nstack-allocated temporary buffer of fixed size for each item in the list\\nand used the sizeof() operator to check for potential buffer overruns.\\nThe new function was changed to allocate the now variably sized temp\\nbuffer on heap, but wasn\u0027t properly updated to also check for max buffer\\nsize using the computed size instead of sizeof() operator.\\n\\nAs a result, the maximum item size was 7 (plus null terminator) on\\n64-bit platforms, and 3 on 32-bit ones. While 7 is accidentally just\\nbarely enough, 3 is definitely too small for some of UVC configfs\\nattributes. For example, dwFrameInteval, specified in 100ns units,\\nusually has 6-digit item values, e.g. 166666 for 60fps.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se resolvi\u00f3 la siguiente vulnerabilidad: usb: gadget: uvc: use el tama\u00f1o de b\u00fafer correcto al analizar listas de configfs. Este commit corrige la compatibilidad con gadgets uvc en plataformas de 32 bits. El commit 0df28607c5cb (\\\"usb: gadget: uvc: Generalizar funciones auxiliares para su reutilizaci\u00f3n\\\") introdujo una funci\u00f3n auxiliar __uvcg_iter_item_entries() para ayudar con el an\u00e1lisis de listas de elementos en las tiendas de atributos de configfs. Esta funci\u00f3n es una generalizaci\u00f3n de otra funci\u00f3n muy similar, que utilizaba un b\u00fafer temporal de tama\u00f1o fijo asignado por la pila para cada elemento de la lista y utilizaba el operador sizeof() para comprobar posibles desbordamientos del b\u00fafer. La nueva funci\u00f3n se cambi\u00f3 para asignar el b\u00fafer temporal ahora de tama\u00f1o variable en el mont\u00f3n, pero no se actualiz\u00f3 correctamente para verificar tambi\u00e9n el tama\u00f1o m\u00e1ximo del b\u00fafer usando el tama\u00f1o calculado en lugar del operador sizeof(). Como resultado, el tama\u00f1o m\u00e1ximo de elemento fue 7 (m\u00e1s terminador nulo) en plataformas de 64 bits y 3 en plataformas de 32 bits. Si bien 7 accidentalmente es apenas suficiente, 3 es definitivamente demasiado peque\u00f1o para algunos de los atributos de configuraci\u00f3n de UVC. Por ejemplo, dwFrameInteval, especificado en unidades de 100 ns, normalmente tiene valores de elementos de 6 d\u00edgitos, por ejemplo, 166666 para 60 fps.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/650ae71c80749fc7cb8858c8049f532eaec64410\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/7a54e5052bde582fd0e7677334fe7a5be92e242c\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/a422089ce42ced73713e5032aad29a9a7cbe9528\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/650ae71c80749fc7cb8858c8049f532eaec64410\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\"},{\"url\":\"https://git.kernel.org/stable/c/7a54e5052bde582fd0e7677334fe7a5be92e242c\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\"},{\"url\":\"https://git.kernel.org/stable/c/a422089ce42ced73713e5032aad29a9a7cbe9528\",\"source\":\"af854a3a-2127-422b-91ae-364da2661108\"}]}}"
  }
}


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.