{"api_version":"1","generated_at":"2026-04-23T07:56:10+00:00","cve":"CVE-2026-31412","urls":{"html":"https://cve.report/CVE-2026-31412","api":"https://cve.report/api/cve/CVE-2026-31412.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-31412","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-31412"},"summary":{"title":"usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()\n\nThe `check_command_size_in_blocks()` function calculates the data size\nin bytes by left shifting `common->data_size_from_cmnd` by the block\nsize (`common->curlun->blkbits`). However, it does not validate whether\nthis shift operation will cause an integer overflow.\n\nInitially, the block size is set up in `fsg_lun_open()` , and the\n`common->data_size_from_cmnd` is set up in `do_scsi_command()`. During\ninitialization, there is no integer overflow check for the interaction\nbetween two variables.\n\nSo if a malicious USB host sends a SCSI READ or WRITE command\nrequesting a large amount of data (`common->data_size_from_cmnd`), the\nleft shift operation can wrap around. This results in a truncated data\nsize, which can bypass boundary checks and potentially lead to memory\ncorruption or out-of-bounds accesses.\n\nFix this by using the check_shl_overflow() macro to safely perform the\nshift and catch any overflows.","state":"PUBLISHED","assigner":"Linux","published_at":"2026-04-10 11:16:22","updated_at":"2026-04-13 15:02:06"},"problem_types":[],"metrics":[],"references":[{"url":"https://git.kernel.org/stable/c/8479891d1f04a8ce55366fe4ca361ccdb96f02e1","name":"https://git.kernel.org/stable/c/8479891d1f04a8ce55366fe4ca361ccdb96f02e1","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/228b37936376143f4b60cc6828663f6eaceb81b5","name":"https://git.kernel.org/stable/c/228b37936376143f4b60cc6828663f6eaceb81b5","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/387ebb0453b99d71491419a5dc4ab4bee0cacbac","name":"https://git.kernel.org/stable/c/387ebb0453b99d71491419a5dc4ab4bee0cacbac","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/3428dc5520c811e66622b2f5fa43341bf9a1f8b3","name":"https://git.kernel.org/stable/c/3428dc5520c811e66622b2f5fa43341bf9a1f8b3","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/91817ad5452defe69bc7bc0e355f0ed5d01125cc","name":"https://git.kernel.org/stable/c/91817ad5452defe69bc7bc0e355f0ed5d01125cc","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://git.kernel.org/stable/c/ce0caaed5940162780c5c223b8ae54968a5f059b","name":"https://git.kernel.org/stable/c/ce0caaed5940162780c5c223b8ae54968a5f059b","refsource":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-31412","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-31412","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 91817ad5452defe69bc7bc0e355f0ed5d01125cc git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 ce0caaed5940162780c5c223b8ae54968a5f059b git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 228b37936376143f4b60cc6828663f6eaceb81b5 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 3428dc5520c811e66622b2f5fa43341bf9a1f8b3 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 387ebb0453b99d71491419a5dc4ab4bee0cacbac git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 144974e7f9e32b53b02f6c8632be45d8f43d6ab5 8479891d1f04a8ce55366fe4ca361ccdb96f02e1 git","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"affected 3.3","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 3.3 semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.1.167 6.1.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.6.130 6.6.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.12.78 6.12.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.18.19 6.18.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 6.19.9 6.19.* semver","platforms":[]},{"source":"CNA","vendor":"Linux","product":"Linux","version":"unaffected 7.0 * original_commit_for_fix","platforms":[]}],"timeline":[],"solutions":[],"workarounds":[],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"31412","cve":"CVE-2026-31412","epss":"0.000100000","percentile":"0.011210000","score_date":"2026-04-15","updated_at":"2026-04-16 00:13:57"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"defaultStatus":"unaffected","product":"Linux","programFiles":["drivers/usb/gadget/function/f_mass_storage.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"lessThan":"91817ad5452defe69bc7bc0e355f0ed5d01125cc","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"},{"lessThan":"ce0caaed5940162780c5c223b8ae54968a5f059b","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"},{"lessThan":"228b37936376143f4b60cc6828663f6eaceb81b5","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"},{"lessThan":"3428dc5520c811e66622b2f5fa43341bf9a1f8b3","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"},{"lessThan":"387ebb0453b99d71491419a5dc4ab4bee0cacbac","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"},{"lessThan":"8479891d1f04a8ce55366fe4ca361ccdb96f02e1","status":"affected","version":"144974e7f9e32b53b02f6c8632be45d8f43d6ab5","versionType":"git"}]},{"defaultStatus":"affected","product":"Linux","programFiles":["drivers/usb/gadget/function/f_mass_storage.c"],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","vendor":"Linux","versions":[{"status":"affected","version":"3.3"},{"lessThan":"3.3","status":"unaffected","version":"0","versionType":"semver"},{"lessThanOrEqual":"6.1.*","status":"unaffected","version":"6.1.167","versionType":"semver"},{"lessThanOrEqual":"6.6.*","status":"unaffected","version":"6.6.130","versionType":"semver"},{"lessThanOrEqual":"6.12.*","status":"unaffected","version":"6.12.78","versionType":"semver"},{"lessThanOrEqual":"6.18.*","status":"unaffected","version":"6.18.19","versionType":"semver"},{"lessThanOrEqual":"6.19.*","status":"unaffected","version":"6.19.9","versionType":"semver"},{"lessThanOrEqual":"*","status":"unaffected","version":"7.0","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"cpeMatch":[{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.1.167","versionStartIncluding":"3.3","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.6.130","versionStartIncluding":"3.3","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.12.78","versionStartIncluding":"3.3","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.18.19","versionStartIncluding":"3.3","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"6.19.9","versionStartIncluding":"3.3","vulnerable":true},{"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionEndExcluding":"7.0","versionStartIncluding":"3.3","vulnerable":true}],"negate":false,"operator":"OR"}]}],"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()\n\nThe `check_command_size_in_blocks()` function calculates the data size\nin bytes by left shifting `common->data_size_from_cmnd` by the block\nsize (`common->curlun->blkbits`). However, it does not validate whether\nthis shift operation will cause an integer overflow.\n\nInitially, the block size is set up in `fsg_lun_open()` , and the\n`common->data_size_from_cmnd` is set up in `do_scsi_command()`. During\ninitialization, there is no integer overflow check for the interaction\nbetween two variables.\n\nSo if a malicious USB host sends a SCSI READ or WRITE command\nrequesting a large amount of data (`common->data_size_from_cmnd`), the\nleft shift operation can wrap around. This results in a truncated data\nsize, which can bypass boundary checks and potentially lead to memory\ncorruption or out-of-bounds accesses.\n\nFix this by using the check_shl_overflow() macro to safely perform the\nshift and catch any overflows."}],"providerMetadata":{"dateUpdated":"2026-04-13T06:08:41.150Z","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux"},"references":[{"url":"https://git.kernel.org/stable/c/91817ad5452defe69bc7bc0e355f0ed5d01125cc"},{"url":"https://git.kernel.org/stable/c/ce0caaed5940162780c5c223b8ae54968a5f059b"},{"url":"https://git.kernel.org/stable/c/228b37936376143f4b60cc6828663f6eaceb81b5"},{"url":"https://git.kernel.org/stable/c/3428dc5520c811e66622b2f5fa43341bf9a1f8b3"},{"url":"https://git.kernel.org/stable/c/387ebb0453b99d71491419a5dc4ab4bee0cacbac"},{"url":"https://git.kernel.org/stable/c/8479891d1f04a8ce55366fe4ca361ccdb96f02e1"}],"title":"usb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()","x_generator":{"engine":"bippy-1.2.0"}}},"cveMetadata":{"assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","assignerShortName":"Linux","cveId":"CVE-2026-31412","datePublished":"2026-04-10T10:35:05.796Z","dateReserved":"2026-03-09T15:48:24.087Z","dateUpdated":"2026-04-13T06:08:41.150Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-04-10 11:16:22","lastModifiedDate":"2026-04-13 15:02:06","problem_types":[],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"31412","Ordinal":"1","Title":"usb: gadget: f_mass_storage: Fix potential integer overflow in c","CVE":"CVE-2026-31412","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"31412","Ordinal":"1","NoteData":"In the Linux kernel, the following vulnerability has been resolved:\n\nusb: gadget: f_mass_storage: Fix potential integer overflow in check_command_size_in_blocks()\n\nThe `check_command_size_in_blocks()` function calculates the data size\nin bytes by left shifting `common->data_size_from_cmnd` by the block\nsize (`common->curlun->blkbits`). However, it does not validate whether\nthis shift operation will cause an integer overflow.\n\nInitially, the block size is set up in `fsg_lun_open()` , and the\n`common->data_size_from_cmnd` is set up in `do_scsi_command()`. During\ninitialization, there is no integer overflow check for the interaction\nbetween two variables.\n\nSo if a malicious USB host sends a SCSI READ or WRITE command\nrequesting a large amount of data (`common->data_size_from_cmnd`), the\nleft shift operation can wrap around. This results in a truncated data\nsize, which can bypass boundary checks and potentially lead to memory\ncorruption or out-of-bounds accesses.\n\nFix this by using the check_shl_overflow() macro to safely perform the\nshift and catch any overflows.","Type":"Description","Title":"usb: gadget: f_mass_storage: Fix potential integer overflow in c"}]}}}