diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index cad0d17ec45e5f3e1911ecfc91cd45f3a8ab4309..3ef1759403b411fe53595e2ddf1eb6314a4f9ef8 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -2750,7 +2750,8 @@ static int ceph_con_in_msg_alloc(struct ceph_connection *con, int *skip)
 		msg = con->ops->alloc_msg(con, hdr, skip);
 		mutex_lock(&con->mutex);
 		if (con->state != CON_STATE_OPEN) {
-			ceph_msg_put(msg);
+			if (msg)
+				ceph_msg_put(msg);
 			return -EAGAIN;
 		}
 		con->in_msg = msg;