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

Commit 7b862e07 authored by Sage Weil's avatar Sage Weil
Browse files

libceph: verify state after retaking con lock after dispatch



We drop the con mutex when delivering a message.  When we retake the
lock, we need to verify we are still in the OPEN state before
preparing to read the next tag, or else we risk stepping on a
connection that has been closed.

Signed-off-by: default avatarSage Weil <sage@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@inktank.com>
parent 4f471e4a
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -2003,7 +2003,6 @@ static void process_message(struct ceph_connection *con)
	con->ops->dispatch(con, msg);

	mutex_lock(&con->mutex);
	prepare_read_tag(con);
}


@@ -2213,6 +2212,8 @@ more:
		if (con->in_tag == CEPH_MSGR_TAG_READY)
			goto more;
		process_message(con);
		if (con->state == CON_STATE_OPEN)
			prepare_read_tag(con);
		goto more;
	}
	if (con->in_tag == CEPH_MSGR_TAG_ACK) {