From db862ae72501a726cb70571395725a1938c6dcc1 Mon Sep 17 00:00:00 2001 From: szymonh <12231135+szymonh@users.noreply.github.com> Date: Mon, 27 Sep 2021 21:11:44 +0200 Subject: [PATCH 1/2] Assure msc device block size is not zero --- src/class/msc/msc_device.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index 0fd59212..b65abe97 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -1,4 +1,4 @@ -/* +/* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) @@ -187,6 +187,11 @@ uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) TU_LOG(MSC_DEBUG, " SCSI case 4 Hi > Dn\r\n"); status = MSC_CSW_STATUS_FAILED; } + else if ( SCSI_CMD_READ_10 == cbw->command[0] && cbw->total_bytes / block_count == 0) + { + TU_LOG(MSC_DEBUG, " Computed block size 0\r\n"); + status = MSC_CSW_STATUS_FAILED; + } } return status; From 7708997a679f61b2ea8fdc7bec880cd19ecaa28f Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 30 Sep 2021 20:14:23 +0700 Subject: [PATCH 2/2] change scsis status to phase error when total_bytes < block_count --- src/class/msc/msc_device.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/class/msc/msc_device.c b/src/class/msc/msc_device.c index b65abe97..87ebe227 100644 --- a/src/class/msc/msc_device.c +++ b/src/class/msc/msc_device.c @@ -182,15 +182,15 @@ uint8_t rdwr10_validate_cmd(msc_cbw_t const* cbw) TU_LOG(MSC_DEBUG, " SCSI case 8 (Hi <> Do)\r\n"); status = MSC_CSW_STATUS_PHASE_ERROR; } - else if ( !block_count ) + else if ( 0 == block_count ) { - TU_LOG(MSC_DEBUG, " SCSI case 4 Hi > Dn\r\n"); + TU_LOG(MSC_DEBUG, " SCSI case 4 Hi > Dn (READ10) or case 9 Ho > Dn (WRITE10) \r\n"); status = MSC_CSW_STATUS_FAILED; } - else if ( SCSI_CMD_READ_10 == cbw->command[0] && cbw->total_bytes / block_count == 0) + else if ( cbw->total_bytes / block_count == 0 ) { - TU_LOG(MSC_DEBUG, " Computed block size 0\r\n"); - status = MSC_CSW_STATUS_FAILED; + TU_LOG(MSC_DEBUG, " Computed block size = 0. SCSI case 7 Hi < Di (READ10) or case 13 Ho < Do (WRIT10)\r\n"); + status = MSC_CSW_STATUS_PHASE_ERROR; } }