From 1e1d15eb0c14a6be82a6d75ab0088a6f0f4f8125 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 27 Oct 2017 16:02:20 -0400 Subject: [PATCH] rbd-mirror: avoid attempting to decode an empty client data buffer Fixes: http://tracker.ceph.com/issues/21961 Signed-off-by: Jason Dillaman --- .../image_replayer/PrepareRemoteImageRequest.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc index 35755a625a5..5fedab88a25 100644 --- a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc @@ -129,20 +129,18 @@ void PrepareRemoteImageRequest::handle_get_client(int r) { if (r == -ENOENT) { dout(10) << "client not registered" << dendl; + register_client(); } else if (r < 0) { derr << "failed to retrieve client: " << cpp_strerror(r) << dendl; finish(r); - return; - } - - *m_client_state = m_client.state; - if (decode_client_meta()) { + } else if (!decode_client_meta()) { + // require operator intervention since the data is corrupt + finish(-EBADMSG); + } else { // skip registration if it already exists + *m_client_state = m_client.state; finish(0); - return; } - - register_client(); } template -- 2.39.5