On 07/07/17 09:56, Johannes Thumshirn wrote:
> SG_DXFER_FROM_DEV transfers do not necessarily have a dxferp as we set
> it to NULL for the old sg_io read/write interface, but must have a length
> bigger than 0. This fixes a regression introduced by commit 28676d869bbb
> ("scsi: sg: check for valid direction before starting the request")
> 

I've tested this new patch and the Nero applications can still find the optical 
drives on my laptop.

Tested-by: Chris Clayton <chris2...@googlemail.com>

> Signed-off-by: Johannes Thumshirn <jthumsh...@suse.de>
> Fixes: 28676d869bbb ("scsi: sg: check for valid direction before starting the 
> request")
> Reported-by: Chris Clayton <chris2...@googlemail.com>
> Tested-by: Chris Clayton <chris2...@googlemail.com>
> Cc: Douglas Gilbert <dgilb...@interlog.com>
> Reviewed-by: Hannes Reinecke <h...@suse.com>
> ---
> Changes to v1:
> * Fix breakage of the sg_io v3 interface, verified using sg_inq
> 
>  drivers/scsi/sg.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
> index 21225d62b0c1..1e82d4128a84 100644
> --- a/drivers/scsi/sg.c
> +++ b/drivers/scsi/sg.c
> @@ -758,8 +758,11 @@ static bool sg_is_valid_dxfer(sg_io_hdr_t *hp)
>               if (hp->dxferp || hp->dxfer_len > 0)
>                       return false;
>               return true;
> -     case SG_DXFER_TO_DEV:
>       case SG_DXFER_FROM_DEV:
> +             if (hp->dxfer_len < 0)
> +                     return false;
> +             return true;
> +     case SG_DXFER_TO_DEV:
>       case SG_DXFER_TO_FROM_DEV:
>               if (!hp->dxferp || hp->dxfer_len == 0)
>                       return false;
> 

Reply via email to