Description
In the Linux kernel, the following vulnerability has been resolved:

memstick: ms_block: reject a card that reports too many blocks

msb_ftl_initialize() computes the zone count from the card block count
with no bound:

msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
...
for (i = 0; i < msb->zone_count; i++)
msb->free_block_count[i] = MS_BLOCKS_IN_ZONE;

msb->block_count is a card value. msb_read_boot_blocks() reads
number_of_blocks from the card boot page and byte swaps it.
free_block_count is a fixed int[MS_MAX_ZONES]. MS_MAX_ZONES is 16, so the
valid indices are 0 to 15. The init loop above indexes it by zone_count.
msb_mark_block_used() and msb_mark_block_unused() index it by
pba / MS_BLOCKS_IN_ZONE, for pba up to block_count - 1. A card may report
up to 65535 blocks. A block_count above 8192 (MS_MAX_ZONES *
MS_BLOCKS_IN_ZONE) lets the pba index reach 16. That writes past
free_block_count[] and corrupts struct msb_data. A larger count runs the
init loop past the end too.

A real Memory Stick has at most 16 zones. So it has at most 8192 blocks.
msb_ftl_initialize() now rejects a card that reports more than
MS_MAX_ZONES * MS_BLOCKS_IN_ZONE blocks.
Published: 2026-08-15
Score: n/a
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A missing bounds check in the Memory Stick block controller permits a Memory Stick card that reports more blocks than expected to cause the driver to write beyond the allocated free block count array. The overflow corrupts the msb_data structure, producing a classic kernel memory corruption vulnerability that could allow an attacker to overwrite kernel data, potentially leading to privilege escalation or system crash.

Affected Systems

All Linux kernel releases that ship the ms_block driver without the new commit that rejects excessive block counts are vulnerable. The vulnerability exists until the fix is applied, so any kernel version that includes the Memory Stick support path (CONFIG_MEMSTICK and CONFIG_MS_BLOCK) and has not received the recent patch is at risk.

Risk and Exploitability

The EPSS score is < 1% and the vulnerability is not listed in CISA KEV, indicating no known active exploitation at this time. Based on the description, the likely attack vector is local physical insertion of a malicious Memory Stick card. The exploit requires physical access to the target machine and an environment where a Memory Stick card can be inserted. While no public exploits have been documented, the out‑of‑bounds write in kernel space presents a high‑severity risk for affected hosts.

Generated by OpenCVE AI on August 15, 2026 at 21:36 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade to a Linux kernel release that contains the commit adding the block‑count bounds check
  • If a kernel upgrade is not feasible, disable the Memory Stick block driver or set CONFIG_MEMSTICK and CONFIG_MS_BLOCK to n and unload the related modules
  • Restrict physical access to USB ports capable of accepting Memory Stick cards using BIOS settings or udev rules
  • Monitor system logs for kernel panics or memory corruption indications that may signal an attempted exploitation

Generated by OpenCVE AI on August 15, 2026 at 21:36 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 15 Aug 2026 06:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: memstick: ms_block: reject a card that reports too many blocks msb_ftl_initialize() computes the zone count from the card block count with no bound: msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE; ... for (i = 0; i < msb->zone_count; i++) msb->free_block_count[i] = MS_BLOCKS_IN_ZONE; msb->block_count is a card value. msb_read_boot_blocks() reads number_of_blocks from the card boot page and byte swaps it. free_block_count is a fixed int[MS_MAX_ZONES]. MS_MAX_ZONES is 16, so the valid indices are 0 to 15. The init loop above indexes it by zone_count. msb_mark_block_used() and msb_mark_block_unused() index it by pba / MS_BLOCKS_IN_ZONE, for pba up to block_count - 1. A card may report up to 65535 blocks. A block_count above 8192 (MS_MAX_ZONES * MS_BLOCKS_IN_ZONE) lets the pba index reach 16. That writes past free_block_count[] and corrupts struct msb_data. A larger count runs the init loop past the end too. A real Memory Stick has at most 16 zones. So it has at most 8192 blocks. msb_ftl_initialize() now rejects a card that reports more than MS_MAX_ZONES * MS_BLOCKS_IN_ZONE blocks.
Title memstick: ms_block: reject a card that reports too many blocks
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-15T05:51:33.441Z

Reserved: 2026-07-30T09:28:09.397Z

Link: CVE-2026-68478

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-15T06:20:47.573

Modified: 2026-08-15T06:20:47.573

Link: CVE-2026-68478

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-15T08:15:04Z

Weaknesses

No weakness.