mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 23:29:46 +00:00
target: Convert inquiry temporary buffer to heap memory
This patch converts the temporary buffer in spc_emulate_inquiry() to use dynamically allocated memory, instead of local stack memory. Also bump SE_INQUIRY_BUF up to 1024 bytes to be safe when handling multiple large SCSI name descriptors for EVPD=0x83. Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
38edd72457
commit
f82f320edc
@ -697,11 +697,15 @@ spc_emulate_inquiry(struct se_cmd *cmd)
|
||||
struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg;
|
||||
unsigned char *rbuf;
|
||||
unsigned char *cdb = cmd->t_task_cdb;
|
||||
unsigned char buf[SE_INQUIRY_BUF];
|
||||
unsigned char *buf;
|
||||
sense_reason_t ret;
|
||||
int p;
|
||||
|
||||
memset(buf, 0, SE_INQUIRY_BUF);
|
||||
buf = kzalloc(SE_INQUIRY_BUF, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
pr_err("Unable to allocate response buffer for INQUIRY\n");
|
||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
}
|
||||
|
||||
if (dev == tpg->tpg_virt_lun0.lun_se_dev)
|
||||
buf[0] = 0x3f; /* Not connected */
|
||||
@ -734,9 +738,10 @@ spc_emulate_inquiry(struct se_cmd *cmd)
|
||||
out:
|
||||
rbuf = transport_kmap_data_sg(cmd);
|
||||
if (rbuf) {
|
||||
memcpy(rbuf, buf, min_t(u32, sizeof(buf), cmd->data_length));
|
||||
memcpy(rbuf, buf, min_t(u32, SE_INQUIRY_BUF, cmd->data_length));
|
||||
transport_kunmap_data_sg(cmd);
|
||||
}
|
||||
kfree(buf);
|
||||
|
||||
if (!ret)
|
||||
target_complete_cmd(cmd, GOOD);
|
||||
|
@ -112,7 +112,7 @@
|
||||
/* Queue Algorithm Modifier default for restricted reordering in control mode page */
|
||||
#define DA_EMULATE_REST_REORD 0
|
||||
|
||||
#define SE_INQUIRY_BUF 768
|
||||
#define SE_INQUIRY_BUF 1024
|
||||
#define SE_MODE_PAGE_BUF 512
|
||||
#define SE_SENSE_BUF 96
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user