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

Commit d3682b1a authored by Mark Rustad's avatar Mark Rustad Committed by Nicholas Bellinger
Browse files

tcm_fc: Check for aborted sequence



Add a check for an aborted sequence, which has a
NULL sequence pointer, to avoid target crashes.
The most relevant messages from the crash (entered
from video capture) include:

BUG: unable to handle kernel paging request at ffffffffffffffdf
IP: [<ffffffffa02d514c>] fc_seq_send+0x3c/0x150 [libfc]
...
Call Trace:
 [<ffffffffa0443de6>] ft_queue_data_in+0x266/0x560 [tcm_fc]

Signed-off-by: default avatarMark Rustad <mark.d.rustad@intel.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 72438cdd
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -103,6 +103,13 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
	use_sg = !(remaining % 4);

	while (remaining) {
		struct fc_seq *seq = cmd->seq;

		if (!seq) {
			pr_debug("%s: Command aborted, xid 0x%x\n",
				 __func__, ep->xid);
			break;
		}
		if (!mem_len) {
			sg = sg_next(sg);
			mem_len = min((size_t)sg->length, remaining);
@@ -169,7 +176,7 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
			f_ctl |= FC_FC_END_SEQ;
		fc_fill_fc_hdr(fp, FC_RCTL_DD_SOL_DATA, ep->did, ep->sid,
			       FC_TYPE_FCP, f_ctl, fh_off);
		error = lport->tt.seq_send(lport, cmd->seq, fp);
		error = lport->tt.seq_send(lport, seq, fp);
		if (error) {
			/* XXX For now, initiator will retry */
			pr_err_ratelimited("%s: Failed to send frame %p, "