]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: return EINVAL on bad PGLS[_FILTER] handle
authorSage Weil <sage@newdream.net>
Wed, 4 Jan 2012 17:49:28 +0000 (09:49 -0800)
committerSage Weil <sage@newdream.net>
Wed, 4 Jan 2012 18:38:39 +0000 (10:38 -0800)
Fixes: #1875
Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/ReplicatedPG.cc

index f6fc5488186770f3c19c985498f37dd056c503f1..baf8700a3106b46f70f63545eb7fd1d601e0ef31 100644 (file)
@@ -262,9 +262,15 @@ void ReplicatedPG::do_pg_op(MOSDOp *op)
     bufferlist::iterator bp = p->data.begin();
     switch (p->op.op) {
     case CEPH_OSD_OP_PGLS_FILTER:
-      ::decode(cname, bp);
-      ::decode(mname, bp);
-
+      try {
+       ::decode(cname, bp);
+       ::decode(mname, bp);
+      }
+      catch (const buffer::error& e) {
+       dout(0) << "unable to decode PGLS_FILTER description in " << *op << dendl;
+       result = -EINVAL;
+       break;
+      }
       result = get_pgls_filter(bp, &filter);
       if (result < 0)
         break;
@@ -282,7 +288,14 @@ void ReplicatedPG::do_pg_op(MOSDOp *op)
        // read into a buffer
         vector<hobject_t> sentries;
         PGLSResponse response;
-       ::decode(response.handle, bp);
+       try {
+         ::decode(response.handle, bp);
+       }
+       catch (const buffer::error& e) {
+         dout(0) << "unable to decode PGLS handle in " << *op << dendl;
+         result = -EINVAL;
+         break;
+       }
 
        hobject_t next;
        hobject_t current = response.handle;