From: Nikhil Kshirsagar Date: Tue, 22 Mar 2022 05:04:23 +0000 (+0530) Subject: mon: Resolve unhandled exception in X-Git-Tag: v16.2.11~520^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bcdf62366eee3f342514948fd08f3d0b0ff2f817;p=ceph.git mon: Resolve unhandled exception in __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 (cherry picked from commit 1109e62f6a3c0a7e06a088c4b833c8ecec51f791) --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index ab9d49acce22..e60a5f3b03fa 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -3426,7 +3426,15 @@ void Monitor::handle_command(MonOpRequestRef op) // validate user's permissions for requested command map 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;