Commit f184210b authored by David Disseldorp's avatar David Disseldorp Committed by Bart Van Assche

target: check XCOPY segment descriptor CSCD IDs

Ensure that the segment descriptor CSCD descriptor ID values correspond
to CSCD descriptor entries located in the XCOPY command parameter list.
SPC4r37 6.4.6.1 Table 150 specifies this range as 0000h to 07FFh, where
the CSCD descriptor location in the parameter list can be located via:
16 + (id * 32)
Signed-off-by: default avatarDavid Disseldorp <ddiss@suse.de>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
[ bvanassche: inserted "; " in the format string of an error message
  and also moved a "||" operator from the start of a line to the end
  of the previous line ]
Signed-off-by: default avatarBart Van Assche <bart.vanassche@sandisk.com>
parent 94aae4ca
...@@ -278,6 +278,14 @@ static int target_xcopy_parse_segdesc_02(struct se_cmd *se_cmd, struct xcopy_op ...@@ -278,6 +278,14 @@ static int target_xcopy_parse_segdesc_02(struct se_cmd *se_cmd, struct xcopy_op
xop->stdi = get_unaligned_be16(&desc[4]); xop->stdi = get_unaligned_be16(&desc[4]);
xop->dtdi = get_unaligned_be16(&desc[6]); xop->dtdi = get_unaligned_be16(&desc[6]);
if (xop->stdi > XCOPY_CSCD_DESC_ID_LIST_OFF_MAX ||
xop->dtdi > XCOPY_CSCD_DESC_ID_LIST_OFF_MAX) {
pr_err("XCOPY segment desc 0x02: unsupported CSCD ID > 0x%x; stdi: %hu dtdi: %hu\n",
XCOPY_CSCD_DESC_ID_LIST_OFF_MAX, xop->stdi, xop->dtdi);
return -EINVAL;
}
pr_debug("XCOPY seg desc 0x02: desc_len: %hu stdi: %hu dtdi: %hu, DC: %d\n", pr_debug("XCOPY seg desc 0x02: desc_len: %hu stdi: %hu dtdi: %hu, DC: %d\n",
desc_len, xop->stdi, xop->dtdi, dc); desc_len, xop->stdi, xop->dtdi, dc);
......
...@@ -5,6 +5,12 @@ ...@@ -5,6 +5,12 @@
#define XCOPY_NAA_IEEE_REGEX_LEN 16 #define XCOPY_NAA_IEEE_REGEX_LEN 16
#define XCOPY_MAX_SECTORS 1024 #define XCOPY_MAX_SECTORS 1024
/*
* SPC4r37 6.4.6.1
* Table 150 — CSCD descriptor ID values
*/
#define XCOPY_CSCD_DESC_ID_LIST_OFF_MAX 0x07FF
enum xcopy_origin_list { enum xcopy_origin_list {
XCOL_SOURCE_RECV_OP = 0x01, XCOL_SOURCE_RECV_OP = 0x01,
XCOL_DEST_RECV_OP = 0x02, XCOL_DEST_RECV_OP = 0x02,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment