From: Jason Dillaman Date: Fri, 27 Oct 2017 20:02:20 +0000 (-0400) Subject: rbd-mirror: avoid attempting to decode an empty client data buffer X-Git-Tag: v12.2.3~88^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=08ed96a7ddc1e587854a7da7edd6c350cc0a1fe5;p=ceph.git rbd-mirror: avoid attempting to decode an empty client data buffer Fixes: http://tracker.ceph.com/issues/21961 Signed-off-by: Jason Dillaman (cherry picked from commit 1e1d15eb0c14a6be82a6d75ab0088a6f0f4f8125) --- diff --git a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc index 35755a625a50..5fedab88a253 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