mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-22 05:01:27 +00:00
scst_copy_mgr: Implement a workaround for non-compliant initiator systems
Reported-by: Eitan Cohen <eitancohen456@gmail.com> git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9498 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -2944,6 +2944,8 @@ static int scst_cm_parse_id_tgt_descr(struct scst_cmd *cmd, const uint8_t *seg,
|
|||||||
/* ToDo: make it hash based */
|
/* ToDo: make it hash based */
|
||||||
|
|
||||||
list_for_each_entry(des, &scst_cm_desig_list, cm_desig_list_entry) {
|
list_for_each_entry(des, &scst_cm_desig_list, cm_desig_list_entry) {
|
||||||
|
uint8_t cmp_len;
|
||||||
|
|
||||||
TRACE_DBG("des %p (tgt_dev %p, lun %lld)", des, des->desig_tgt_dev,
|
TRACE_DBG("des %p (tgt_dev %p, lun %lld)", des, des->desig_tgt_dev,
|
||||||
(unsigned long long)des->desig_tgt_dev->lun);
|
(unsigned long long)des->desig_tgt_dev->lun);
|
||||||
if (seg[4] != des->desig[0])
|
if (seg[4] != des->desig[0])
|
||||||
@@ -2952,7 +2954,14 @@ static int scst_cm_parse_id_tgt_descr(struct scst_cmd *cmd, const uint8_t *seg,
|
|||||||
continue;
|
continue;
|
||||||
if (seg[7] > des->desig[3])
|
if (seg[7] > des->desig[3])
|
||||||
continue;
|
continue;
|
||||||
if (memcmp(&des->desig[4], &seg[8], min_t(int, seg[7], des->desig[3])) == 0) {
|
/*
|
||||||
|
* From SPC-6: "The designator length shall be 20 or less".
|
||||||
|
* However, both libiscsi and sg_copy may specify a designator
|
||||||
|
* length > 20 bytes while truncating the designator to 20
|
||||||
|
* bytes. Hence the code below that restricts cmp_len to 20.
|
||||||
|
*/
|
||||||
|
cmp_len = min_t(u8, min(seg[7], des->desig[3]), 20);
|
||||||
|
if (memcmp(&des->desig[4], &seg[8], cmp_len) == 0) {
|
||||||
TRACE_DBG("Tgt_dev %p (lun %lld) found",
|
TRACE_DBG("Tgt_dev %p (lun %lld) found",
|
||||||
des->desig_tgt_dev,
|
des->desig_tgt_dev,
|
||||||
(unsigned long long)des->desig_tgt_dev->lun);
|
(unsigned long long)des->desig_tgt_dev->lun);
|
||||||
|
|||||||
Reference in New Issue
Block a user