[libvirt] [Qemu-devel] [PATCH 1/3] scsi-disk: Don't use empty string as device id
Philippe Mathieu-Daudé
philmd at redhat.com
Tue Jan 29 12:30:03 UTC 2019
On 1/25/19 6:46 PM, Kevin Wolf wrote:
> scsi-disk includes in the Device Identification VPD page, depending on
> configuration amongst others, a vendor specific designator that consists
> either of the serial number if given or the BlockBackend name (which is
> a host detail that better shouldn't have been leaked to the guest, but
> now we have to maintain it for compatibility).
>
> With anonymous BlockBackends, i.e. scsi-disk devices constructed with
> drive=<node-name>, and no serial number explicitly specified, this ends
> up as an empty string. If this happens to more than one disk, we have
> accidentally signalled to the OS that this is a multipath setup, which
> is obviously not what was intended.
>
> Instead of using an empty string for the vendor specific designator,
> simply leave out that designator, which makes Linux detect such setups
> as separate disks again.
>
> Signed-off-by: Kevin Wolf <kwolf at redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd at redhat.com>
> ---
> hw/scsi/scsi-disk.c | 14 ++++++++------
> 1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
> index 0e9027c8f3..93eef40b87 100644
> --- a/hw/scsi/scsi-disk.c
> +++ b/hw/scsi/scsi-disk.c
> @@ -652,12 +652,14 @@ static int scsi_disk_emulate_vpd_page(SCSIRequest *req, uint8_t *outbuf)
> DPRINTF("Inquiry EVPD[Device identification] "
> "buffer size %zd\n", req->cmd.xfer);
>
> - outbuf[buflen++] = 0x2; /* ASCII */
> - outbuf[buflen++] = 0; /* not officially assigned */
> - outbuf[buflen++] = 0; /* reserved */
> - outbuf[buflen++] = id_len; /* length of data following */
> - memcpy(outbuf + buflen, str, id_len);
> - buflen += id_len;
> + if (id_len) {
> + outbuf[buflen++] = 0x2; /* ASCII */
> + outbuf[buflen++] = 0; /* not officially assigned */
> + outbuf[buflen++] = 0; /* reserved */
> + outbuf[buflen++] = id_len; /* length of data following */
> + memcpy(outbuf + buflen, str, id_len);
> + buflen += id_len;
> + }
>
> if (s->qdev.wwn) {
> outbuf[buflen++] = 0x1; /* Binary */
>
More information about the libvir-list
mailing list