Commit c85dcdac5852295cf6822f5c4331a6ddab72581f

Authored by Alan Stern
Committed by Felipe Balbi
1 parent 662c738d99

USB: gadget: storage gadgets send wrong error code for unknown commands

This patch (as1539) fixes a minor bug in the mass-storage gadget
drivers.  When an unknown command is received, the error code sent
back is "Invalid Field in CDB" rather than "Invalid Command".  This is
because the bitmask of CDB bytes allowed to be nonzero is incorrect.

When handling an unknown command, we don't care which command bytes
are nonzero.  All the bits in the mask should be set, not just eight
of them.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: <Michal Nazarewicz <mina86@mina86.com>
CC: <stable@vger.kernel.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>

Showing 2 changed files with 2 additions and 2 deletions Side-by-side Diff

drivers/usb/gadget/f_mass_storage.c
... ... @@ -2189,7 +2189,7 @@
2189 2189 common->data_size_from_cmnd = 0;
2190 2190 sprintf(unknown, "Unknown x%02x", common->cmnd[0]);
2191 2191 reply = check_command(common, common->cmnd_size,
2192   - DATA_DIR_UNKNOWN, 0xff, 0, unknown);
  2192 + DATA_DIR_UNKNOWN, ~0, 0, unknown);
2193 2193 if (reply == 0) {
2194 2194 common->curlun->sense_data = SS_INVALID_COMMAND;
2195 2195 reply = -EINVAL;
drivers/usb/gadget/file_storage.c
... ... @@ -2579,7 +2579,7 @@
2579 2579 fsg->data_size_from_cmnd = 0;
2580 2580 sprintf(unknown, "Unknown x%02x", fsg->cmnd[0]);
2581 2581 if ((reply = check_command(fsg, fsg->cmnd_size,
2582   - DATA_DIR_UNKNOWN, 0xff, 0, unknown)) == 0) {
  2582 + DATA_DIR_UNKNOWN, ~0, 0, unknown)) == 0) {
2583 2583 fsg->curlun->sense_data = SS_INVALID_COMMAND;
2584 2584 reply = -EINVAL;
2585 2585 }