CVE-2026-31412 PUBLISHED

usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()

Assigner: Linux
Reserved: 09.03.2026 Published: 10.04.2026 Updated: 10.04.2026

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

usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()

The check_command_size_in_blocks() function calculates the data size in bytes by left shifting common->data_size_from_cmnd by the block size (common->curlun->blkbits). However, it does not validate whether this shift operation will cause an integer overflow.

Initially, the block size is set up in fsg_lun_open() , and the common->data_size_from_cmnd is set up in do_scsi_command(). During initialization, there is no integer overflow check for the interaction between two variables.

So if a malicious USB host sends a SCSI READ or WRITE command requesting a large amount of data (common->data_size_from_cmnd), the left shift operation can wrap around. This results in a truncated data size, which can bypass boundary checks and potentially lead to memory corruption or out-of-bounds accesses.

Fix this by using the check_shl_overflow() macro to safely perform the shift and catch any overflows.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to 91817ad5452defe69bc7bc0e355f0ed5d01125cc (excl.)
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to ce0caaed5940162780c5c223b8ae54968a5f059b (excl.)
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to 228b37936376143f4b60cc6828663f6eaceb81b5 (excl.)
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to 3428dc5520c811e66622b2f5fa43341bf9a1f8b3 (excl.)
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to 387ebb0453b99d71491419a5dc4ab4bee0cacbac (excl.)
  • affected from 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 to 8479891d1f04a8ce55366fe4ca361ccdb96f02e1 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 3.3 is affected
  • unaffected from 0 to 3.3 (excl.)
  • unaffected from 6.1.167 to 6.1.* (incl.)
  • unaffected from 6.6.130 to 6.6.* (incl.)
  • unaffected from 6.12.78 to 6.12.* (incl.)
  • unaffected from 6.18.19 to 6.18.* (incl.)
  • unaffected from 6.19.9 to 6.19.* (incl.)
  • unaffected from 7.0-rc4 to * (incl.)

References