Message ID | 20210120153522.1173897-4-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | hw/usb/dev-uas: Fix Clang 11 -Wgnu-variable-sized-type-not-at-end error | expand |
On Wed, Jan 20, 2021 at 04:35:22PM +0100, Philippe Mathieu-Daudé wrote: > We are not ready to handle additional CDB data. > > If a guest sends a packet with such additional data, > report the command parameter as not supported. > > Specify a size (of 1 byte) for the add_cdb member we > are not using, to fix the following warning: > > usb/dev-uas.c:157:31: error: field 'status' with variable sized type 'uas_iu' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] > uas_iu status; > ^ > > Reported-by: Ed Maste <emaste@FreeBSD.org> > Reported-by: Daniele Buono <dbuono@linux.vnet.ibm.com> > Reported-by: Han Han <hhan@redhat.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > Cc: Marc-André Lureau <marcandre.lureau@redhat.com> > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Gustavo A. R. Silva <gustavo@embeddedor.com> > > v2: include Eric feedbacks Queued 2+3, fixup #2 conflicts due to dropping #1. thanks, Gerd
On 1/21/21 12:14 PM, Gerd Hoffmann wrote: > On Wed, Jan 20, 2021 at 04:35:22PM +0100, Philippe Mathieu-Daudé wrote: >> We are not ready to handle additional CDB data. >> >> If a guest sends a packet with such additional data, >> report the command parameter as not supported. >> >> Specify a size (of 1 byte) for the add_cdb member we >> are not using, to fix the following warning: >> >> usb/dev-uas.c:157:31: error: field 'status' with variable sized type 'uas_iu' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] >> uas_iu status; >> ^ >> >> Reported-by: Ed Maste <emaste@FreeBSD.org> >> Reported-by: Daniele Buono <dbuono@linux.vnet.ibm.com> >> Reported-by: Han Han <hhan@redhat.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> --- >> Cc: Marc-André Lureau <marcandre.lureau@redhat.com> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> Cc: Gustavo A. R. Silva <gustavo@embeddedor.com> >> >> v2: include Eric feedbacks > > Queued 2+3, fixup #2 conflicts due to dropping #1. Thank you!
diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index cec071d96c4..a51402bc0bf 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -16,6 +16,7 @@ #include "qemu/error-report.h" #include "qemu/main-loop.h" #include "qemu/module.h" +#include "qemu/log.h" #include "hw/usb.h" #include "migration/vmstate.h" @@ -70,7 +71,7 @@ typedef struct { uint8_t reserved_2; uint64_t lun; uint8_t cdb[16]; - uint8_t add_cdb[]; + uint8_t add_cdb[1]; /* not supported by QEMU */ } QEMU_PACKED uas_iu_command; typedef struct { @@ -700,6 +701,11 @@ static void usb_uas_command(UASDevice *uas, uas_iu *iu) uint32_t len; uint16_t tag = be16_to_cpu(iu->hdr.tag); + if (iu->command.add_cdb_length > 0) { + qemu_log_mask(LOG_UNIMP, "additional adb length not yet supported\n"); + goto unsupported_len; + } + if (uas_using_streams(uas) && tag > UAS_MAX_STREAMS) { goto invalid_tag; } @@ -735,6 +741,10 @@ static void usb_uas_command(UASDevice *uas, uas_iu *iu) } return; +unsupported_len: + usb_uas_queue_fake_sense(uas, tag, sense_code_INVALID_PARAM_VALUE); + return; + invalid_tag: usb_uas_queue_fake_sense(uas, tag, sense_code_INVALID_TAG); return;