mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	target/iscsi: Fix iSCSI task reassignment handling
Allocate a task management request structure for all task management requests, including task reassignment. This change avoids that the se_tmr->response assignment dereferences an uninitialized se_tmr pointer. Reported-by: Moshe David <mdavid@infinidat.com> Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Moshe David <mdavid@infinidat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
		
							parent
							
								
									e381fe9e89
								
							
						
					
					
						commit
						59b6986dbf
					
				
					 1 changed files with 7 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -1951,7 +1951,7 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 | 
			
		|||
	struct iscsi_tm *hdr;
 | 
			
		||||
	int out_of_order_cmdsn = 0, ret;
 | 
			
		||||
	bool sess_ref = false;
 | 
			
		||||
	u8 function;
 | 
			
		||||
	u8 function, tcm_function = TMR_UNKNOWN;
 | 
			
		||||
 | 
			
		||||
	hdr			= (struct iscsi_tm *) buf;
 | 
			
		||||
	hdr->flags &= ~ISCSI_FLAG_CMD_FINAL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1997,10 +1997,6 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 | 
			
		|||
	 * LIO-Target $FABRIC_MOD
 | 
			
		||||
	 */
 | 
			
		||||
	if (function != ISCSI_TM_FUNC_TASK_REASSIGN) {
 | 
			
		||||
 | 
			
		||||
		u8 tcm_function;
 | 
			
		||||
		int ret;
 | 
			
		||||
 | 
			
		||||
		transport_init_se_cmd(&cmd->se_cmd, &iscsi_ops,
 | 
			
		||||
				      conn->sess->se_sess, 0, DMA_NONE,
 | 
			
		||||
				      TCM_SIMPLE_TAG, cmd->sense_buffer + 2);
 | 
			
		||||
| 
						 | 
				
			
			@ -2014,15 +2010,14 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
 | 
			
		|||
			return iscsit_add_reject_cmd(cmd,
 | 
			
		||||
				ISCSI_REASON_BOOKMARK_NO_RESOURCES, buf);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ret = core_tmr_alloc_req(&cmd->se_cmd, cmd->tmr_req,
 | 
			
		||||
					 tcm_function, GFP_KERNEL);
 | 
			
		||||
		if (ret < 0)
 | 
			
		||||
			return iscsit_add_reject_cmd(cmd,
 | 
			
		||||
	}
 | 
			
		||||
	ret = core_tmr_alloc_req(&cmd->se_cmd, cmd->tmr_req, tcm_function,
 | 
			
		||||
				 GFP_KERNEL);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		return iscsit_add_reject_cmd(cmd,
 | 
			
		||||
				ISCSI_REASON_BOOKMARK_NO_RESOURCES, buf);
 | 
			
		||||
 | 
			
		||||
		cmd->tmr_req->se_tmr_req = cmd->se_cmd.se_tmr_req;
 | 
			
		||||
	}
 | 
			
		||||
	cmd->tmr_req->se_tmr_req = cmd->se_cmd.se_tmr_req;
 | 
			
		||||
 | 
			
		||||
	cmd->iscsi_opcode	= ISCSI_OP_SCSI_TMFUNC;
 | 
			
		||||
	cmd->i_state		= ISTATE_SEND_TASKMGTRSP;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue