On 06/26/2018 12:40 PM, Paolo Bonzini wrote:
> The response size is expected to be zero if the SCSI status is not
> "GOOD", but nothing was resetting it.
> 
> This can be reproduced simply by "sg_persist -s /dev/sdb" where /dev/sdb
> in the guest is a scsi-block device corresponding to a multipath device
> on the host.
> 
> Before:
> 
>   PR in (Read full status): Aborted command
> 
> and on the host:
> 
>   prh_write_response: Assertion `resp->sz == 0' failed.
> 
> After:
> 
>   PR in (Read full status): bad field in cdb or parameter list
>   (perhaps unsupported service action)
> 
> Reported-by: Jiri Belka <jbe...@redhat.com>
> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org>

> ---
>  scsi/qemu-pr-helper.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/scsi/qemu-pr-helper.c b/scsi/qemu-pr-helper.c
> index 4057cf355c..0218d65bbf 100644
> --- a/scsi/qemu-pr-helper.c
> +++ b/scsi/qemu-pr-helper.c
> @@ -558,7 +558,11 @@ static int do_pr_in(int fd, const uint8_t *cdb, uint8_t 
> *sense,
>  #ifdef CONFIG_MPATH
>      if (is_mpath(fd)) {
>          /* multipath_pr_in fills the whole input buffer.  */
> -        return multipath_pr_in(fd, cdb, sense, data, *resp_sz);
> +        int r = multipath_pr_in(fd, cdb, sense, data, *resp_sz);
> +        if (r != GOOD) {
> +            *resp_sz = 0;
> +        }
> +        return r;
>      }
>  #endif
>  
> 

Reply via email to