Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f82f320e authored by Nicholas Bellinger's avatar Nicholas Bellinger
Browse files

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: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 38edd724
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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