FKIE_CVE-2026-99038

Vulnerability from fkie_nvd - Published: 2026-10-23 13:17 - Updated: 2026-10-23 13:17
Severity
Summary
In the Linux kernel, the following vulnerability has been resolved: memstick: rtsx_usb_ms: complete requests after eject instead of dropping them memstick_check() can pass its host->removing check just before rtsx_usb_ms_drv_remove() sets eject/removing. Its next request is then silently dropped: rtsx_usb_ms_request() skips schedule_work() once eject is set, and drv_remove's cancel_work_sync() can also cancel a queued handle_req before it picks the request up. Nobody completes card->mrq_complete. Once memstick core waits for requests without a timeout ("memstick: core: wait for request completion before freeing card"), this hangs removal: memstick_check() never returns and memstick_remove_host() blocks in flush_workqueue(): INFO: task kworker/u10:3:65 blocked for more than 20 seconds. Workqueue: kmemstick memstick_check __wait_for_common memstick_check INFO: task kworker/1:1:33 blocked for more than 20 seconds. Workqueue: usb_hub_wq hub_event __flush_workqueue memstick_remove_host rtsx_usb_ms_drv_remove Never drop a request. rtsx_usb_ms_request() always schedules handle_req, and handle_req fails requests with -ENOMEDIUM once eject is set, without touching the device. drv_remove flushes handle_req instead of cancelling it, and cancels it only after memstick_remove_host(), when no new request can arrive, so it cannot run on a freed host. The host_mutex drain in drv_remove is removed: handle_req always leaves host->req NULL when it finishes, so the drain never had anything to do, and it would now race with handle_req.
Impacted products
Vendor Product Version

{
  "affected": [
    {
      "affectedData": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/memstick/host/rtsx_usb_ms.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "f2c181e1d58e911804e14543b2f1cc6b23a0d4d6",
              "status": "affected",
              "version": "99451dceeb5fdd789f0a2eeb3ee029e80d2ccc40",
              "versionType": "git"
            },
            {
              "lessThan": "5b599e28aeb3684772aef64f46cc6f25f4c67128",
              "status": "affected",
              "version": "99451dceeb5fdd789f0a2eeb3ee029e80d2ccc40",
              "versionType": "git"
            },
            {
              "lessThan": "d7e811c3a49cd5cff529c157df886719e09370ec",
              "status": "affected",
              "version": "99451dceeb5fdd789f0a2eeb3ee029e80d2ccc40",
              "versionType": "git"
            },
            {
              "lessThan": "5616da0f92339328fa1472876df51555e15ad340",
              "status": "affected",
              "version": "99451dceeb5fdd789f0a2eeb3ee029e80d2ccc40",
              "versionType": "git"
            },
            {
              "lessThan": "c96ca94425b076dc398d929366e378d1e22ec794",
              "status": "affected",
              "version": "99451dceeb5fdd789f0a2eeb3ee029e80d2ccc40",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/memstick/host/rtsx_usb_ms.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.16"
            },
            {
              "lessThan": "3.16",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.160",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.113",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.57",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "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\nmemstick: rtsx_usb_ms: complete requests after eject instead of dropping them\n\nmemstick_check() can pass its host-\u003eremoving check just before\nrtsx_usb_ms_drv_remove() sets eject/removing. Its next request is then\nsilently dropped: rtsx_usb_ms_request() skips schedule_work() once eject\nis set, and drv_remove\u0027s cancel_work_sync() can also cancel a queued\nhandle_req before it picks the request up. Nobody completes\ncard-\u003emrq_complete.\n\nOnce memstick core waits for requests without a timeout (\"memstick: core:\nwait for request completion before freeing card\"), this hangs removal:\nmemstick_check() never returns and memstick_remove_host() blocks in\nflush_workqueue():\n\n  INFO: task kworker/u10:3:65 blocked for more than 20 seconds.\n  Workqueue: kmemstick memstick_check\n   __wait_for_common\n   memstick_check\n\n  INFO: task kworker/1:1:33 blocked for more than 20 seconds.\n  Workqueue: usb_hub_wq hub_event\n   __flush_workqueue\n   memstick_remove_host\n   rtsx_usb_ms_drv_remove\n\nNever drop a request. rtsx_usb_ms_request() always schedules handle_req,\nand handle_req fails requests with -ENOMEDIUM once eject is set, without\ntouching the device. drv_remove flushes handle_req instead of cancelling\nit, and cancels it only after memstick_remove_host(), when no new\nrequest can arrive, so it cannot run on a freed host.\n\nThe host_mutex drain in drv_remove is removed: handle_req always leaves\nhost-\u003ereq NULL when it finishes, so the drain never had anything to do,\nand it would now race with handle_req."
    }
  ],
  "id": "CVE-2026-99038",
  "lastModified": "2026-10-23T13:17:27.067",
  "metrics": {},
  "published": "2026-10-23T13:17:27.067",
  "references": [
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "url": "https://git.kernel.org/stable/c/5616da0f92339328fa1472876df51555e15ad340"
    },
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "url": "https://git.kernel.org/stable/c/5b599e28aeb3684772aef64f46cc6f25f4c67128"
    },
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "url": "https://git.kernel.org/stable/c/c96ca94425b076dc398d929366e378d1e22ec794"
    },
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "url": "https://git.kernel.org/stable/c/d7e811c3a49cd5cff529c157df886719e09370ec"
    },
    {
      "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
      "url": "https://git.kernel.org/stable/c/f2c181e1d58e911804e14543b2f1cc6b23a0d4d6"
    }
  ],
  "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…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

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.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    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.