Re: [PATCH] scsi: scsi_debug: Fix do_device_access() handling of unexpected SG copy length

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18/10/2024 11:16, John Garry wrote:
If the sg_copy_buffer() call returns less than sdebug_sector_size, then we
drop out of the copy loop. However, we still report that we copied the
full expected amount, which is not proper.

Fix by keeping a running total and return that value.

Fixes: 84f3a3c01d70 ("scsi: scsi_debug: Atomic write support")
Reported-by: Colin Ian King <colin.i.king@xxxxxxxxx>
Suggested-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Signed-off-by: John Garry <john.g.garry@xxxxxxxxxx>

diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index d95f417e24c0..9be2a6a00530 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -3651,7 +3651,7 @@ static int do_device_access(struct sdeb_store_info *sip, struct scsi_cmnd *scp,
  	enum dma_data_direction dir;
  	struct scsi_data_buffer *sdb = &scp->sdb;
  	u8 *fsp;
-	int i;
+	int i, total = 0;
/*
  	 * Even though reads are inherently atomic (in this driver), we expect
@@ -3688,18 +3688,16 @@ static int do_device_access(struct sdeb_store_info *sip, struct scsi_cmnd *scp,
  		   fsp + (block * sdebug_sector_size),
  		   sdebug_sector_size, sg_skip, do_write);
  		sdeb_data_sector_unlock(sip, do_write);
-		if (ret != sdebug_sector_size) {
-			ret += (i * sdebug_sector_size);
+		total += ret;
+		if (ret != sdebug_sector_size)
  			break;
-		}
  		sg_skip += sdebug_sector_size;
  		if (++block >= sdebug_store_sectors)
  			block = 0;
  	}
-	ret = num * sdebug_sector_size;
  	sdeb_data_unlock(sip, atomic);
- return ret;
+	return total;
  }
/* Returns number of bytes copied or -1 if error. */

Thank you for fixing this. It looks good to me.

Reviewed-by: Colin Ian King <colin.i.king@xxxxxxxxx>

Colin





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux