]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Resolve unhandled exception in 45893/head
authorNikhil Kshirsagar <nkshirsagar@gmail.com>
Tue, 22 Mar 2022 05:04:23 +0000 (10:34 +0530)
committerNikhil Kshirsagar <nkshirsagar@gmail.com>
Wed, 13 Apr 2022 09:41:25 +0000 (15:11 +0530)
__generate_command_map()

If improper json data is passed to rados, it can
end up crashing the mon. This fix will catch the
exception if thrown by __generate_command_map()
and avoid the mon getting terminated due to an
uncaught exception.

Fixes: https://tracker.ceph.com/issues/54558
Signed-off-by: Nikhil Kshirsagar <nkshirsagar@gmail.com>
(cherry picked from commit 1109e62f6a3c0a7e06a088c4b833c8ecec51f791)

src/mon/Monitor.cc

index ab9d49acce224684c369742e3740880e509ccadf..e60a5f3b03faa0c401c607effc87d1494e86d3f2 100644 (file)
@@ -3426,7 +3426,15 @@ void Monitor::handle_command(MonOpRequestRef op)
 
   // validate user's permissions for requested command
   map<string,string> param_str_map;
-  _generate_command_map(cmdmap, param_str_map);
+
+  // Catch bad_cmd_get exception if _generate_command_map() throws it
+  try {
+    _generate_command_map(cmdmap, param_str_map);
+  }
+  catch(bad_cmd_get& e) {
+    reply_command(op, -EINVAL, e.what(), 0);
+  }
+
   if (!_allowed_command(session, service, prefix, cmdmap,
                         param_str_map, mon_cmd)) {
     dout(1) << __func__ << " access denied" << dendl;