diff mbox series

scsi: Don't check uninitialized local variable

Message ID 20180108030946.14991-1-famz@redhat.com
State New
Headers show
Series scsi: Don't check uninitialized local variable | expand

Commit Message

Fam Zheng Jan. 8, 2018, 3:09 a.m. UTC
After the out label there is a check on iTask.task but it is not
initialized yet.

Fixes: e38bc23454ef763deb4405ebdee6a1081aa00bc8
Signed-off-by: Fam Zheng <famz@redhat.com>
---
 block/iscsi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Comments

Peter Lieven Jan. 8, 2018, 1:20 p.m. UTC | #1
Am 08.01.2018 um 04:09 schrieb Fam Zheng:
> After the out label there is a check on iTask.task but it is not
> initialized yet.
>
> Fixes: e38bc23454ef763deb4405ebdee6a1081aa00bc8
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>   block/iscsi.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 5c0a9e55b6..1cb8cc93c5 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -659,8 +659,7 @@ static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,
>       int64_t ret;
>   
>       if (!is_sector_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
> -        ret = -EINVAL;
> -        goto out;
> +        return -EINVAL;
>       }
>   
>       /* default to all sectors allocated */

If lbpme is 0 we run into the same error. And this is even more likely than an unaligned request.

I think the right patch is to move the init of iTask up again where it was:


diff --git a/block/iscsi.c b/block/iscsi.c
index 5c0a9e5..6a1c537 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -658,6 +658,8 @@ static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,
      uint64_t lba;
      int64_t ret;

+    iscsi_co_init_iscsitask(iscsilun, &iTask);
+
      if (!is_sector_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
          ret = -EINVAL;
          goto out;
@@ -675,7 +677,6 @@ static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,

      lba = sector_qemu2lun(sector_num, iscsilun);

-    iscsi_co_init_iscsitask(iscsilun, &iTask);
      qemu_mutex_lock(&iscsilun->mutex);
  retry:
      if (iscsi_get_lba_status_task(iscsilun->iscsi, iscsilun->lun,


Peter
Eric Blake Jan. 8, 2018, 3:05 p.m. UTC | #2
On 01/08/2018 07:20 AM, Peter Lieven wrote:
> Am 08.01.2018 um 04:09 schrieb Fam Zheng:
>> After the out label there is a check on iTask.task but it is not
>> initialized yet.
>>
>> Fixes: e38bc23454ef763deb4405ebdee6a1081aa00bc8
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> ---
>>   block/iscsi.c | 3 +--
>>   1 file changed, 1 insertion(+), 2 deletions(-)
>>

> If lbpme is 0 we run into the same error. And this is even more likely
> than an unaligned request.

In fact, my byte-based series adds an assertion that unaligned requests
aren't possible.

> 
> I think the right patch is to move the init of iTask up again where it was:

I had to rebase v7 of my byte-based series on top of the late iTask
initialization; moving it back to early initialization makes sense.

> 
> 
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 5c0a9e5..6a1c537 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -658,6 +658,8 @@ static int64_t coroutine_fn
> iscsi_co_get_block_status(BlockDriverState *bs,
>      uint64_t lba;
>      int64_t ret;
> 
> +    iscsi_co_init_iscsitask(iscsilun, &iTask);
> +
>      if (!is_sector_request_lun_aligned(sector_num, nb_sectors,
> iscsilun)) {
>          ret = -EINVAL;
>          goto out;
> @@ -675,7 +677,6 @@ static int64_t coroutine_fn
> iscsi_co_get_block_status(BlockDriverState *bs,
> 
>      lba = sector_qemu2lun(sector_num, iscsilun);
> 
> -    iscsi_co_init_iscsitask(iscsilun, &iTask);
>      qemu_mutex_lock(&iscsilun->mutex);
>  retry:
>      if (iscsi_get_lba_status_task(iscsilun->iscsi, iscsilun->lun,

If you resubmit this as a formal patch, you can add:
Reviewed-by: Eric Blake <eblake@redhat.com>
Paolo Bonzini Jan. 9, 2018, 6:05 p.m. UTC | #3
On 08/01/2018 04:09, Fam Zheng wrote:
> After the out label there is a check on iTask.task but it is not
> initialized yet.
> 
> Fixes: e38bc23454ef763deb4405ebdee6a1081aa00bc8
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  block/iscsi.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/block/iscsi.c b/block/iscsi.c
> index 5c0a9e55b6..1cb8cc93c5 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -659,8 +659,7 @@ static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,
>      int64_t ret;
>  
>      if (!is_sector_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
> -        ret = -EINVAL;
> -        goto out;
> +        return -EINVAL;
>      }
>  
>      /* default to all sectors allocated */
> 

Queued, thanks.

Paolo
Eric Blake Jan. 9, 2018, 6:14 p.m. UTC | #4
On 01/09/2018 12:05 PM, Paolo Bonzini wrote:
> On 08/01/2018 04:09, Fam Zheng wrote:
>> After the out label there is a check on iTask.task but it is not
>> initialized yet.
>>
>> Fixes: e38bc23454ef763deb4405ebdee6a1081aa00bc8
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> ---
>>  block/iscsi.c | 3 +--
>>  1 file changed, 1 insertion(+), 2 deletions(-)
>>
>> diff --git a/block/iscsi.c b/block/iscsi.c
>> index 5c0a9e55b6..1cb8cc93c5 100644
>> --- a/block/iscsi.c
>> +++ b/block/iscsi.c
>> @@ -659,8 +659,7 @@ static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,
>>      int64_t ret;
>>  
>>      if (!is_sector_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
>> -        ret = -EINVAL;
>> -        goto out;
>> +        return -EINVAL;
>>      }
>>  
>>      /* default to all sectors allocated */
>>
> 
> Queued, thanks.

I thought we wanted Peter's version, not Fam's.
https://lists.gnu.org/archive/html/qemu-devel/2018-01/msg01237.html
diff mbox series

Patch

diff --git a/block/iscsi.c b/block/iscsi.c
index 5c0a9e55b6..1cb8cc93c5 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -659,8 +659,7 @@  static int64_t coroutine_fn iscsi_co_get_block_status(BlockDriverState *bs,
     int64_t ret;
 
     if (!is_sector_request_lun_aligned(sector_num, nb_sectors, iscsilun)) {
-        ret = -EINVAL;
-        goto out;
+        return -EINVAL;
     }
 
     /* default to all sectors allocated */