On 1/29/19 12:40 AM, Christoph Hellwig wrote:
On Wed, Jan 23, 2019 at 11:12:37AM -0800, Bart Van Assche wrote:
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 4e69f182a1e5..b0eb83526c54 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1129,6 +1129,10 @@ static blk_status_t sd_setup_rw6_cmnd(struct scsi_cmnd 
*cmd, bool write,
                                      sector_t lba, unsigned int nr_blocks,
                                      unsigned char flags)
  {
+       /* Avoid that 0 blocks gets translated into 256 blocks. */
+       if (WARN_ON_ONCE(nr_blocks == 0))
+               return BLK_STS_IOERR;
+

While the WARN_ON here looks helpful shouldn't we instead ensure that
sd_setup_rw6_cmnd never gets called with a 0 argument instead of bailing
out like this?

Hi Christoph,

Before I posted this patch I searched for code that submits read or write requests with length 0 but I haven't found any. do_iter_read() and do_iter_write() in fs/read_write.c do not submit any block layer requests if tot_len == 0. Are you perhaps aware of kernel code that can submit zero-length read or write requests?

Thanks,

Bart.

Reply via email to