scsi: target: core: Check emulate_3pc for RECEIVE COPY
authorDmitry Bogdanov <d.bogdanov@yadro.com>
Tue, 6 Sep 2022 10:34:20 +0000 (13:34 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 27 Oct 2022 01:47:13 +0000 (01:47 +0000)
RECEIVE COPY RESULTS is an opcode from 3rd party copy command set and shall
be rejected if emulate_3pc attribute is off like EXTENDED COPY.

Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
Link: https://lore.kernel.org/r/20220906103421.22348-6-d.bogdanov@yadro.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_xcopy.c

index 8713cda..edf5222 100644 (file)
@@ -1009,8 +1009,14 @@ sense_reason_t target_do_receive_copy_results(struct se_cmd *se_cmd)
 {
        unsigned char *cdb = &se_cmd->t_task_cdb[0];
        int sa = (cdb[1] & 0x1f), list_id = cdb[2];
+       struct se_device *dev = se_cmd->se_dev;
        sense_reason_t rc = TCM_NO_SENSE;
 
+       if (!dev->dev_attrib.emulate_3pc) {
+               pr_debug("Third-party copy operations explicitly disabled\n");
+               return TCM_UNSUPPORTED_SCSI_OPCODE;
+       }
+
        pr_debug("Entering target_do_receive_copy_results: SA: 0x%02x, List ID:"
                " 0x%02x, AL: %u\n", sa, list_id, se_cmd->data_length);