[Devel] [PATCH 05/10] target: bounds check XCOPY total descriptor list length
Andrei Vagin
avagin at openvz.org
Tue Apr 3 02:30:23 MSK 2018
From: David Disseldorp <ddiss at suse.de>
ML: 7d38706669ce00603b187f667a4eb67c94eac098
spc4r37 6.4.3.5 states:
If the combined length of the CSCD descriptors and segment descriptors
exceeds the allowed value, then the copy manager shall terminate the
command with CHECK CONDITION status, with the sense key set to ILLEGAL
REQUEST, and the additional sense code set to PARAMETER LIST LENGTH
ERROR.
This functionality can be tested using the libiscsi
ExtendedCopy.DescrLimits test.
Signed-off-by: David Disseldorp <ddiss at suse.de>
Reviewed-by: Christoph Hellwig <hch at lst.de>
Signed-off-by: Bart Van Assche <bart.vanassche at sandisk.com>
Signed-off-by: Andrei Vagin <avagin at openvz.org>
---
drivers/target/target_core_xcopy.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/target/target_core_xcopy.c b/drivers/target/target_core_xcopy.c
index d8d53c4..f2ea6cc 100644
--- a/drivers/target/target_core_xcopy.c
+++ b/drivers/target/target_core_xcopy.c
@@ -940,6 +940,12 @@ sense_reason_t target_do_xcopy(struct se_cmd *se_cmd)
*/
tdll = get_unaligned_be16(&p[2]);
sdll = get_unaligned_be32(&p[8]);
+ if (tdll + sdll > RCR_OP_MAX_DESC_LIST_LEN) {
+ pr_err("XCOPY descriptor list length %u exceeds maximum %u\n",
+ tdll + sdll, RCR_OP_MAX_DESC_LIST_LEN);
+ ret = TCM_PARAMETER_LIST_LENGTH_ERROR;
+ goto out;
+ }
inline_dl = get_unaligned_be32(&p[12]);
if (inline_dl != 0) {
--
1.8.3.1
More information about the Devel
mailing list