Backport #22618
Updated by Nathan Cutler over 6 years ago
https://github.com/ceph/ceph/pull/19847 When put bucket policy with invalid effect, the RGW process panics with "Segmentation fault". Example bucket policy { 'Statement':[{ 'Effect':'All', }] } RGW panic trace 0> 2017-12-26 15:05:52.479 7f45b4e33700 -1 *** Caught signal (Segmentation fault) ** in thread 7f45b4e33700 thread_name:civetweb-worker ceph version 13.0.0-4024-g0ba3308 (0ba33080769d8aa696b7e704c01edf5c05cab6c1) mimic (dev) 1: (()+0x1f9bec) [0x556929ae0bec] 2: (()+0x11390) [0x7f45edda6390] 3: (rgw::IAM::ParseState::do_string(CephContext*, char const*, unsigned long)+0x200) [0x556929d59030] 4: (void rapidjson::GenericReader<rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>::ParseString<96u, rapidjson::GenericStringStream<rapidjson::UTF8<char> >, rgw::IAM::PolicyParser>(rapidjson::GenericStringStream<rapidjson::UTF8<char> >&, rgw::IAM::PolicyParser&, bool)+0x11a) [0x556929d6457a] 5: (void rapidjson::GenericReader<rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>::ParseObject<96u, rapidjson::GenericStringStream<rapidjson::UTF8<char> >, rgw::IAM::PolicyParser>(rapidjson::GenericStringStream<rapidjson::UTF8<char> >&, rgw::IAM::PolicyParser&)+0x147) [0x556929d650d7] 6: (void rapidjson::GenericReader<rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>::ParseValue<96u, rapidjson::GenericStringStream<rapidjson::UTF8<char> >, rgw::IAM::PolicyParser>(rapidjson::GenericStringStream<rapidjson::UTF8<char> >&, rgw::IAM::PolicyParser&)+0x156) [0x556929d64cb6] 7: (void rapidjson::GenericReader<rapidjson::UTF8<char>, rapidjson::UTF8<char>, rapidjson::CrtAllocator>::ParseObject<96u, rapidjson::GenericStringStream<rapidjson::UTF8<char> >, rgw::IAM::PolicyParser>(rapidjson::GenericStringStream<rapidjson::UTF8<char> >&, rgw::IAM::PolicyParser&)+0x147) [0x556929d650d7] 8: (rgw::IAM::Policy::Policy(CephContext*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, ceph::buffer::list const&)+0x123) [0x556929d5a7e3] 9: (RGWPutBucketPolicy::execute()+0x97) [0x556929bbb907] 10: (rgw_process_authenticated(RGWHandler_REST*, RGWOp*&, RGWRequest*, req_state*, bool)+0x14f) [0x556929becfbf] 11: (process_request(RGWRados*, RGWREST*, RGWRequest*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, rgw::auth::StrategyRegistry const&, RGWRestfulIO*, OpsLogSocket*)+0x186c) [0x556929beea3c] 12: (RGWCivetWebFrontend::process(mg_connection*)+0x39c) [0x556929a991fc] 13: (()+0x1eb189) [0x556929ad2189] 14: (()+0x1ecb59) [0x556929ad3b59] 15: (()+0x76ba) [0x7f45edd9c6ba] 16: (clone()+0x6d) [0x7f45e39a63dd] NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.