Commit 95fe1ee41e23fa271416da67483594dde74bc6ca

Authored by Sebastian Andrzej Siewior
Committed by Nicholas Bellinger
1 parent bf0053550a

target: accept REQUEST_SENSE with 18bytes

WindowsXP+BOT issues a MODE_SENSE request with page 0x1c which is not
suppoerted by target. Target rejects that command with
TCM_INVALID_CDB_FIELD, so far so good. On BOT I can't send the SENSE
response back, instead I can only reply that an error occured. The next
thing happens is a REQUEST_SENSE request with 18 bytes length. Since the
check here is more than 18 bytes I have to NACK that request as well.
This is not really required: We check for some additional room, but we
never use it. The additional length is set to 0xa so the total length is
0xa + 8 = 18 which is fine with my 18 bytes.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

Showing 1 changed file with 4 additions and 10 deletions Side-by-side Diff

drivers/target/target_core_cdb.c
... ... @@ -1058,11 +1058,8 @@
1058 1058 */
1059 1059 buf[0] = 0x70;
1060 1060 buf[SPC_SENSE_KEY_OFFSET] = UNIT_ATTENTION;
1061   - /*
1062   - * Make sure request data length is enough for additional
1063   - * sense data.
1064   - */
1065   - if (cmd->data_length <= 18) {
  1061 +
  1062 + if (cmd->data_length < 18) {
1066 1063 buf[7] = 0x00;
1067 1064 err = -EINVAL;
1068 1065 goto end;
... ... @@ -1079,11 +1076,8 @@
1079 1076 */
1080 1077 buf[0] = 0x70;
1081 1078 buf[SPC_SENSE_KEY_OFFSET] = NO_SENSE;
1082   - /*
1083   - * Make sure request data length is enough for additional
1084   - * sense data.
1085   - */
1086   - if (cmd->data_length <= 18) {
  1079 +
  1080 + if (cmd->data_length < 18) {
1087 1081 buf[7] = 0x00;
1088 1082 err = -EINVAL;
1089 1083 goto end;