Commit fecae40abb1ae9218bdbaa8b8e30bfb5ae43f522
1 parent
3a3c5e4a67
Exists in
master
and in
20 other branches
target: Fix incorrect starting offset after MODE_SENSE refactoring
This patch fixes a new off-by-one bug in the hardcoded starting offset of spc_emulate_modesense() code that causes BLOCK DESCRIPTOR to be incorrectly written within the MEDIUM TYPE buffer area of the mode parameter header. According to spc4r30, Section 7.5.4, BLOCK DESCRIPTOR for MODE_SENSE_10 starts at byte 3, and BLOCK_DESCRIPTOR for MODE_SENSE (6) starts at byte 2. (roland: add MODE DATA LENGTH + MEDIUM TYPE offset comment) Cc: Roland Dreier <roland@purestorage.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Douglas Gilbert <dgilbert@interlog.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Showing 1 changed file with 5 additions and 2 deletions Side-by-side Diff
drivers/target/target_core_spc.c
... | ... | @@ -870,8 +870,11 @@ |
870 | 870 | } else { |
871 | 871 | buf = map_buf; |
872 | 872 | } |
873 | - | |
874 | - length = ten ? 2 : 1; | |
873 | + /* | |
874 | + * Skip over MODE DATA LENGTH + MEDIUM TYPE fields to byte 3 for | |
875 | + * MODE_SENSE_10 and byte 2 for MODE_SENSE (6). | |
876 | + */ | |
877 | + length = ten ? 3 : 2; | |
875 | 878 | |
876 | 879 | /* DEVICE-SPECIFIC PARAMETER */ |
877 | 880 | if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || |