Overview
About vulnerability
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.
Details
- Affected product:
- AlmaLinux 9.2 ESU , CentOS 7 ELS , CentOS 8.4 ELS , CentOS 8.5 ELS , CentOS Stream 8 ELS , CloudLinux 7 ELS , Oracle Linux 7 ELS , RHEL 7 ELS , TuxCare 9.6 ESU , Ubuntu 16.04 ELS , Ubuntu 18.04 ELS , Ubuntu 20.04 ELS
- Affected packages:
- kernel @ 4.18.0 (+13 more)
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.