mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-15 13:22:55 +00:00
[SCSI] scsi_debug: Fix 32-bit overflow in do_device_access causing memory corruption
If I create a scsi_debug device that is larger than 4GB, the multiplication of (block * scsi_debug_sector_size) can produce a 64-bit value. Unfortunately, the compiler sees two 32-bit quantities and performs a 32-bit multiplication, thus truncating the bits above 2^32. This causes the wrong memory location to be read or written. Change block and rest to be unsigned long long. Signed-off-by: Darrick J. Wong <djwong@us.ibm.com> Acked-by: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
044d78e1ac
commit
a361cc0025
@ -1671,7 +1671,7 @@ static int do_device_access(struct scsi_cmnd *scmd,
|
||||
unsigned long long lba, unsigned int num, int write)
|
||||
{
|
||||
int ret;
|
||||
unsigned int block, rest = 0;
|
||||
unsigned long long block, rest = 0;
|
||||
int (*func)(struct scsi_cmnd *, unsigned char *, int);
|
||||
|
||||
func = write ? fetch_to_dev_buffer : fill_from_dev_buffer;
|
||||
|
Loading…
Reference in New Issue
Block a user