[stgt] [PATCH 09/13] spc: fix data-in buffer generation for REPORT_CAPABILITIES of PERSISTENT_RESERVE_IN
nezhinsky at gmail.com
nezhinsky at gmail.com
Wed Jan 16 10:01:49 CET 2013
From: Alexander Nezhinsky <nezhinsky at gmail.com>
Generate PGR caps data-in in a separate buffer and safe-copy it to the
command buffer taking into account the allocation length. Set the actual
transfer len correctly.
Signed-off-by: Alexander Nezhinsky <nezhinsky at gmail.com>
---
usr/spc.c | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/usr/spc.c b/usr/spc.c
index 3a86793..646b50c 100644
--- a/usr/spc.c
+++ b/usr/spc.c
@@ -974,25 +974,22 @@ sense:
static int spc_pr_report_capabilities(int host_no, struct scsi_cmd *cmd)
{
+ uint32_t alloc_len, avail_len, actual_len;
+ uint8_t *data, buf[8];
uint16_t asc = ASC_INVALID_FIELD_IN_CDB;
uint8_t key = ILLEGAL_REQUEST;
- uint8_t *buf;
- uint16_t len;
- len = get_unaligned_be16(cmd->scb + 7);
- if (len < 8)
+ alloc_len = (uint32_t)get_unaligned_be16(&cmd->scb[7]);
+ if (alloc_len < 8)
goto sense;
- if (scsi_get_in_length(cmd) < len)
+ if (scsi_get_in_length(cmd) < alloc_len)
goto sense;
- buf = scsi_get_in_buffer(cmd);
-
- len = 8;
-
- memset(buf, 0, len);
+ memset(buf, 0, 8);
+ avail_len = 8;
- put_unaligned_be16(len, &buf[0]);
+ put_unaligned_be16(avail_len, &buf[0]); /* length */
/* we don't set any capability for now */
@@ -1006,6 +1003,10 @@ static int spc_pr_report_capabilities(int host_no, struct scsi_cmd *cmd)
buf[4] |= 0x02; /* PR_TYPE_WRITE_EXCLUSIVE */
buf[5] |= 0x01; /* PR_TYPE_EXCLUSIVE_ACCESS_ALLREG */
+ data = scsi_get_in_buffer(cmd);
+ actual_len = mem_copy_n32(data, buf, avail_len, NULL, &alloc_len);
+ scsi_set_in_resid_by_actual(cmd, actual_len);
+
return SAM_STAT_GOOD;
sense:
scsi_set_in_resid_by_actual(cmd, 0);
--
1.7.9.6
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list