]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
auth/cephx/CephxClientHandler: handle decode errors 31052/head
authorSage Weil <sage@redhat.com>
Tue, 22 Oct 2019 12:43:14 +0000 (07:43 -0500)
committerSage Weil <sage@redhat.com>
Tue, 22 Oct 2019 12:43:46 +0000 (07:43 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/auth/cephx/CephxClientHandler.cc

index 94a9b7a0eb3b95c7872b916aa4696e603add8db7..abdb2f2cc474b52c813702da439d3c21a85f6e85 100644 (file)
@@ -128,7 +128,13 @@ int CephxClientHandler::handle_response(
 
   if (starting) {
     CephXServerChallenge ch;
-    decode(ch, indata);
+    try {
+      decode(ch, indata);
+    } catch (buffer::error& e) {
+      ldout(cct, 1) << __func__ << " failed to decode CephXServerChallenge: "
+                   << e.what() << dendl;
+      return -EPERM;
+    }
     server_challenge = ch.server_challenge;
     ldout(cct, 10) << " got initial server challenge "
                   << std::hex << server_challenge << std::dec << dendl;
@@ -139,7 +145,13 @@ int CephxClientHandler::handle_response(
   }
 
   struct CephXResponseHeader header;
-  decode(header, indata);
+  try {
+    decode(header, indata);
+  } catch (buffer::error& e) {
+    ldout(cct, 1) << __func__ << " failed to decode CephXResponseHeader: "
+                 << e.what() << dendl;
+    return -EPERM;
+  }
 
   switch (header.request_type) {
   case CEPHX_GET_AUTH_SESSION_KEY:
@@ -159,8 +171,14 @@ int CephxClientHandler::handle_response(
       ldout(cct, 10) << " want=" << want << " need=" << need << " have=" << have << dendl;
       if (!indata.end()) {
        bufferlist cbl, extra_tickets;
-       decode(cbl, indata);
-       decode(extra_tickets, indata);
+       try {
+         decode(cbl, indata);
+         decode(extra_tickets, indata);
+       } catch (buffer::error& e) {
+         ldout(cct, 1) << __func__ << " failed to decode tickets: "
+                       << e.what() << dendl;
+         return -EPERM;
+       }
        ldout(cct, 10) << " got connection bl " << cbl.length()
                       << " and extra tickets " << extra_tickets.length()
                       << dendl;