diff mbox series

scsi: Don't deference in_buf if NULL

Message ID 20180104024228.11780-1-famz@redhat.com
State New
Headers show
Series scsi: Don't deference in_buf if NULL | expand

Commit Message

Fam Zheng Jan. 4, 2018, 2:42 a.m. UTC
scsi_disk_emulate_command passes in_buf=NULL and in_len=0 in the
REQUEST_SENSE branch. Inline the fixed_in evaluation and put it after
the in_len test.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 scsi/utils.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

Comments

Eric Blake Jan. 4, 2018, 5:02 p.m. UTC | #1
On 01/03/2018 08:42 PM, Fam Zheng wrote:
> scsi_disk_emulate_command passes in_buf=NULL and in_len=0 in the
> REQUEST_SENSE branch. Inline the fixed_in evaluation and put it after
> the in_len test.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  scsi/utils.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/scsi/utils.c b/scsi/utils.c
> index ddae650a99..9a0a925ef9 100644
> --- a/scsi/utils.c
> +++ b/scsi/utils.c
> @@ -320,10 +320,8 @@ int scsi_convert_sense(uint8_t *in_buf, int in_len,
>                         uint8_t *buf, int len, bool fixed)
>  {
>      SCSISense sense;
> -    bool fixed_in;
>  
> -    fixed_in = (in_buf[0] & 2) == 0;
> -    if (in_len && fixed == fixed_in) {
> +    if (in_len && !!fixed == ((in_buf[0] & 2) == 0)) {

Huh?  'fixed' is already a bool, so '!!fixed' is just extra typing that
makes things harder to read.  Did you mean:

if (in_len && fixed == !(in_buf[0] & 2))

as something that is slightly more legible (the LHS is already bool, the
RHS uses a single ! to convert a bitwise test into a bool with the
correct sense)?
Eric Blake Jan. 4, 2018, 5:41 p.m. UTC | #2
On 01/03/2018 08:42 PM, Fam Zheng wrote:
> scsi_disk_emulate_command passes in_buf=NULL and in_len=0 in the
> REQUEST_SENSE branch. Inline the fixed_in evaluation and put it after
> the in_len test.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  scsi/utils.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)

Does this patch duplicate
https://lists.gnu.org/archive/html/qemu-devel/2017-12/msg04964.html ?
Fam Zheng Jan. 5, 2018, 1:49 a.m. UTC | #3
On Thu, 01/04 11:41, Eric Blake wrote:
> On 01/03/2018 08:42 PM, Fam Zheng wrote:
> > scsi_disk_emulate_command passes in_buf=NULL and in_len=0 in the
> > REQUEST_SENSE branch. Inline the fixed_in evaluation and put it after
> > the in_len test.
> > 
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> >  scsi/utils.c | 4 +---
> >  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> Does this patch duplicate
> https://lists.gnu.org/archive/html/qemu-devel/2017-12/msg04964.html ?

Yes. Thanks for pointing out this.

Fam
Anthoine Bourgeois Jan. 5, 2018, 4:45 p.m. UTC | #4
On Thu, Jan 04, 2018 at 11:02:25AM -0600, Eric Blake wrote:
>On 01/03/2018 08:42 PM, Fam Zheng wrote:
>> scsi_disk_emulate_command passes in_buf=NULL and in_len=0 in the
>> REQUEST_SENSE branch. Inline the fixed_in evaluation and put it after
>> the in_len test.
>>
>> Signed-off-by: Fam Zheng <famz@redhat.com>
>> ---
>>  scsi/utils.c | 4 +---
>>  1 file changed, 1 insertion(+), 3 deletions(-)
>
>Huh?  'fixed' is already a bool, so '!!fixed' is just extra typing that
>makes things harder to read.  Did you mean:
>
>if (in_len && fixed == !(in_buf[0] & 2))
>
>as something that is slightly more legible (the LHS is already bool, the
>RHS uses a single ! to convert a bitwise test into a bool with the
>correct sense)?

It seems correct and clearer.

With Eric's modification:
Tested-by: Anthoine Bourgeois <anthoine.bourgeois@gmail.com>
diff mbox series

Patch

diff --git a/scsi/utils.c b/scsi/utils.c
index ddae650a99..9a0a925ef9 100644
--- a/scsi/utils.c
+++ b/scsi/utils.c
@@ -320,10 +320,8 @@  int scsi_convert_sense(uint8_t *in_buf, int in_len,
                        uint8_t *buf, int len, bool fixed)
 {
     SCSISense sense;
-    bool fixed_in;
 
-    fixed_in = (in_buf[0] & 2) == 0;
-    if (in_len && fixed == fixed_in) {
+    if (in_len && !!fixed == ((in_buf[0] & 2) == 0)) {
         memcpy(buf, in_buf, MIN(len, in_len));
         return MIN(len, in_len);
     }