Re: [PATCH v2 3/3] hw/usb/dev-uas: Report command additional adb length as unsupported
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_iustatus; >> ^ >> >> Reported-by: Ed Maste >> Reported-by: Daniele Buono >> Reported-by: Han Han >> Reviewed-by: Eric Blake >> Signed-off-by: Philippe Mathieu-Daudé >> --- >> Cc: Marc-André Lureau >> Cc: Paolo Bonzini >> Cc: Gustavo A. R. Silva >> >> v2: include Eric feedbacks > > Queued 2+3, fixup #2 conflicts due to dropping #1. Thank you!
Re: [PATCH v2 3/3] hw/usb/dev-uas: Report command additional adb length as unsupported
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_iustatus; > ^ > > Reported-by: Ed Maste > Reported-by: Daniele Buono > Reported-by: Han Han > Reviewed-by: Eric Blake > Signed-off-by: Philippe Mathieu-Daudé > --- > Cc: Marc-André Lureau > Cc: Paolo Bonzini > Cc: Gustavo A. R. Silva > > v2: include Eric feedbacks Queued 2+3, fixup #2 conflicts due to dropping #1. thanks, Gerd
[PATCH v2 3/3] hw/usb/dev-uas: Report command additional adb length as unsupported
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_iustatus; ^ Reported-by: Ed Maste Reported-by: Daniele Buono Reported-by: Han Han Reviewed-by: Eric Blake Signed-off-by: Philippe Mathieu-Daudé --- Cc: Marc-André Lureau Cc: Paolo Bonzini Cc: Gustavo A. R. Silva v2: include Eric feedbacks --- hw/usb/dev-uas.c | 12 +++- 1 file changed, 11 insertions(+), 1 deletion(-) 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_treserved_2; uint64_t lun; uint8_tcdb[16]; -uint8_tadd_cdb[]; +uint8_tadd_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; -- 2.26.2