CVE-2026-93121 (GCVE-0-2026-93121)

Vulnerability from cvelistv5 – Published: 2026-09-17 16:11 – Updated: 2026-09-18 17:56
VLAI
Title
usb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths
Summary
In the Linux kernel, the following vulnerability has been resolved: usb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths The error paths for endpoint-disabled (ESHUTDOWN) and request-allocation failure (ENOMEM) in ffs_dmabuf_transfer() jump to err_fence_put which calls dma_fence_put() on the fence. However, at that point the fence has only been kmalloc'd — dma_fence_init() has not been called yet, so the refcount and the fence ops are uninitialized. Calling dma_fence_put() on such an object leads to undefined behavior. Use kfree() instead, since the fence is just a plain allocation at this stage, and rename the label to err_fence_free to reflect the actual cleanup action.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 7b07a2a7ca02a20124b552be96c5a56910795488 , < be539138d9a187af3b884525a395db10797c64f1 (git)
Affected: 7b07a2a7ca02a20124b552be96c5a56910795488 , < 5fd8baacc7dc477df9cac61b45491840247a9b1e (git)
Affected: 7b07a2a7ca02a20124b552be96c5a56910795488 , < 58952c83dfe6ea3294a74734d2d1018c1120779a (git)
Affected: 7b07a2a7ca02a20124b552be96c5a56910795488 , < 621707dc67c9846fd876d7579ec951d92aa033f1 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.9
Unaffected: 0 , < 6.9 (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/usb/gadget/function/f_fs.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "be539138d9a187af3b884525a395db10797c64f1",
              "status": "affected",
              "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
              "versionType": "git"
            },
            {
              "lessThan": "5fd8baacc7dc477df9cac61b45491840247a9b1e",
              "status": "affected",
              "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
              "versionType": "git"
            },
            {
              "lessThan": "58952c83dfe6ea3294a74734d2d1018c1120779a",
              "status": "affected",
              "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
              "versionType": "git"
            },
            {
              "lessThan": "621707dc67c9846fd876d7579ec951d92aa033f1",
              "status": "affected",
              "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/usb/gadget/function/f_fs.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.9"
            },
            {
              "lessThan": "6.9",
              "status": "unaffected",
              "version": "0",
              "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.12.110",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.52",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.6",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3-rc1",
                  "versionStartIncluding": "6.9",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths\n\nThe error paths for endpoint-disabled (ESHUTDOWN) and request-allocation\nfailure (ENOMEM) in ffs_dmabuf_transfer() jump to err_fence_put which\ncalls dma_fence_put() on the fence. However, at that point the fence has\nonly been kmalloc\u0027d \u2014 dma_fence_init() has not been called yet, so the\nrefcount and the fence ops are uninitialized. Calling dma_fence_put() on\nsuch an object leads to undefined behavior.\n\nUse kfree() instead, since the fence is just a plain allocation at this\nstage, and rename the label to err_fence_free to reflect the actual\ncleanup action."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The uninitialized fence is kmalloc\u0027d and then dma_fence_put() in ffs_dmabuf_transfer(), reached only from ffs_epfile_ioctl()\u0027s FUNCTIONFS_DMABUF_TRANSFER case after copy_from_user of usb_ffs_dmabuf_transfer_req; USB host traffic never supplies that ioctl or the fence object.\nAC:H - err_fence_put runs only when epfile-\u003eep != ep after ffs_epfile_wait_ep() (epfile-\u003eep is NULLed solely by ffs_func_eps_disable() from gadget set_alt/disable/unbind) or when usb_ep_alloc_request(..., GFP_ATOMIC) fails; the ioctl caller cannot invoke those gadget callbacks and cannot reliably force that small GFP_ATOMIC allocation to fail.\nPR:L - ffs_epfile_ioctl() has no capable() check; FUNCTIONFS_DMABUF_TRANSFER only needs the endpoint file open. FunctionFS inodes take uid/gid/mode from ffs_fs_parse_param() (uid=/gid=/fmode=), which deployed gadgets use to hand ep nodes to non-root daemons such as adbd.\nUI:N - The attacker issues FUNCTIONFS_DMABUF_TRANSFER themselves on an endpoint fd they already hold; ffs_epfile_wait_ep() needing a prior host SET_CONFIGURATION is ambient gadget enumeration, not a victim action at exploit time.\nS:U - dma_fence_put() on the kmalloc\u0027d ffs_dma_fence runs dma_fence_release() in the same kernel that hosts FunctionFS, so impact stays inside that kernel\u0027s privilege boundary rather than crossing a VM or IOMMU authority.\nC:H - kmalloc_obj(*fence) is not zeroed and dma_fence_init() has not run, so fence-\u003erefcount and fence-\u003eops are leftover heap contents; dma_fence_put() calls dma_fence_release() if the sprayed refcount is 1, which rcu_dereference()s ops and reads other fence fields.\nI:H - dma_fence_release() calls ops-\u003erelease() through the uninitialized fence-\u003eops pointer (or walks garbage cb_list in the pending-signal path); a same-cache heap spray can point ops at attacker-controlled function pointers for control-flow hijack.\nA:H - dma_fence_release() does list_empty(\u0026fence-\u003ecb_list) and dma_fence_lock_irqsave() on uninitialized cb_list/lock and may invoke a wild ops-\u003erelease(), any of which oopses or panics when the ESHUTDOWN or ENOMEM err_fence_put path runs."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-18T17:56:03.061Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/be539138d9a187af3b884525a395db10797c64f1"
        },
        {
          "url": "https://git.kernel.org/stable/c/5fd8baacc7dc477df9cac61b45491840247a9b1e"
        },
        {
          "url": "https://git.kernel.org/stable/c/58952c83dfe6ea3294a74734d2d1018c1120779a"
        },
        {
          "url": "https://git.kernel.org/stable/c/621707dc67c9846fd876d7579ec951d92aa033f1"
        }
      ],
      "title": "usb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-93121",
    "datePublished": "2026-09-17T16:11:27.220Z",
    "dateReserved": "2026-09-17T16:02:15.086Z",
    "dateUpdated": "2026-09-18T17:56:03.061Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-93121",
      "date": "2026-09-25",
      "epss": "0.00155",
      "percentile": "0.039"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/usb/gadget/function/f_fs.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "be539138d9a187af3b884525a395db10797c64f1",
                    "status": "affected",
                    "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "5fd8baacc7dc477df9cac61b45491840247a9b1e",
                    "status": "affected",
                    "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "58952c83dfe6ea3294a74734d2d1018c1120779a",
                    "status": "affected",
                    "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "621707dc67c9846fd876d7579ec951d92aa033f1",
                    "status": "affected",
                    "version": "7b07a2a7ca02a20124b552be96c5a56910795488",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/usb/gadget/function/f_fs.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "6.9"
                  },
                  {
                    "lessThan": "6.9",
                    "status": "unaffected",
                    "version": "0",
                    "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\nusb: gadget: f_fs: Fix fence cleanup in ffs_dmabuf_transfer() error paths\n\nThe error paths for endpoint-disabled (ESHUTDOWN) and request-allocation\nfailure (ENOMEM) in ffs_dmabuf_transfer() jump to err_fence_put which\ncalls dma_fence_put() on the fence. However, at that point the fence has\nonly been kmalloc\u0027d \u2014 dma_fence_init() has not been called yet, so the\nrefcount and the fence ops are uninitialized. Calling dma_fence_put() on\nsuch an object leads to undefined behavior.\n\nUse kfree() instead, since the fence is just a plain allocation at this\nstage, and rename the label to err_fence_free to reflect the actual\ncleanup action."
          }
        ],
        "id": "CVE-2026-93121",
        "lastModified": "2026-09-18T18:18:21.560",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "HIGH",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.0,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.0,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-17T17:18:06.803",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/58952c83dfe6ea3294a74734d2d1018c1120779a"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/5fd8baacc7dc477df9cac61b45491840247a9b1e"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/621707dc67c9846fd876d7579ec951d92aa033f1"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/be539138d9a187af3b884525a395db10797c64f1"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



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…