Hi, Please find the latest report on new defect(s) introduced to ceph found with Coverity Scan. 19 new defect(s) introduced to ceph found with Coverity Scan. 5 defect(s), reported by Coverity Scan earlier, were marked fixed in the recent build analyzed by Coverity Scan. New defect(s) Reported-by: Coverity Scan Showing 19 of 19 defect(s) ** CID 1251445: Unchecked return value (CHECKED_RETURN) /mon/MDSMonitor.cc: 1511 in MDSMonitor::filesystem_command(MMonCommand *, const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, double, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, double, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>>>> &, std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &)() ** CID 1251446: Unchecked return value (CHECKED_RETURN) /osd/PGBackend.cc: 292 in PGBackend::build_pg_backend(const pg_pool_t &, std::tr1::shared_ptr<const OSDMap>, PGBackend::Listener *, coll_t, coll_t, ObjectStore *, CephContext *)() ** CID 1251447: Data race condition (MISSING_LOCK) /os/FileJournal.cc: 614 in FileJournal::start_writer()() ** CID 1251448: Resource leak (RESOURCE_LEAK) /test/librados/TestCase.cc: 282 in RadosTest::cleanup_namespace(void *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>)() /test/librados/TestCase.cc: 275 in RadosTest::cleanup_namespace(void *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>)() ** CID 1251449: Resource leak (RESOURCE_LEAK) /test/librados/TestCase.cc: 52 in RadosTestNS::cleanup_all_objects(void *)() /test/librados/TestCase.cc: 43 in RadosTestNS::cleanup_all_objects(void *)() ** CID 1251450: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 177 in TestLibRBD_CreateAndStat_Test::TestBody()() ** CID 1251451: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 1288 in TestLibRBD_ListChildren_Test::TestBody()() ** CID 1251452: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 1388 in TestLibRBD_ListChildrenTiered_Test::TestBody()() ** CID 1251453: Resource leak (RESOURCE_LEAK) /test/system/st_rados_list_objects.cc: 72 in StRadosListObjects::run()() /test/system/st_rados_list_objects.cc: 82 in StRadosListObjects::run()() ** CID 1251454: Resource leak (RESOURCE_LEAK) /test/system/st_rados_list_objects.cc: 82 in StRadosListObjects::run()() ** CID 1251455: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() ** CID 1251456: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() ** CID 1251457: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() ** CID 1251458: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() ** CID 1251459: Uninitialized pointer field (UNINIT_CTOR) /test/librados/TestCase.h: 24 in RadosTestNS::RadosTestNS()() ** CID 1251460: Uninitialized pointer field (UNINIT_CTOR) /test/librados/TestCase.h: 76 in RadosTestECNS::RadosTestECNS()() ** CID 1251461: Uninitialized scalar field (UNINIT_CTOR) /test/librados/TestCase.h: 93 in RadosTestECPPNS::RadosTestECPPNS()() ** CID 1251462: Use after free (USE_AFTER_FREE) /test/librbd/test_librbd.cc: 299 in test_ls(void *, unsigned long, ...)() ** CID 1251463: Missing varargs init or cleanup (VARARGS) /test/librbd/test_librbd.cc: 303 in test_ls(void *, unsigned long, ...)() ________________________________________________________________________________________________________ *** CID 1251445: Unchecked return value (CHECKED_RETURN) /mon/MDSMonitor.cc: 1511 in MDSMonitor::filesystem_command(MMonCommand *, const std::basic_string<char, std::char_traits<char>, std::allocator<char>>&, std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, double, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char>>, boost::variant<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, double, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>>>> &, std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &)() 1505 r = -EINVAL; 1506 poolid = -1; 1507 ss << "cannot remove default data pool"; 1508 } 1509 1510 if (poolid >= 0) { >>> CID 1251445: Unchecked return value (CHECKED_RETURN) >>> Calling "cmd_getval" without checking return value (as is done elsewhere 19 out of 22 times). 1511 cmd_getval(g_ceph_context, cmdmap, "poolid", poolid); 1512 r = pending_mdsmap.remove_data_pool(poolid); 1513 if (r == -ENOENT) 1514 r = 0; 1515 if (r == 0) 1516 ss << "removed data pool " << poolid << " from mdsmap"; ________________________________________________________________________________________________________ *** CID 1251446: Unchecked return value (CHECKED_RETURN) /osd/PGBackend.cc: 292 in PGBackend::build_pg_backend(const pg_pool_t &, std::tr1::shared_ptr<const OSDMap>, PGBackend::Listener *, coll_t, coll_t, ObjectStore *, CephContext *)() 286 } 287 case pg_pool_t::TYPE_ERASURE: { 288 ErasureCodeInterfaceRef ec_impl; 289 const map<string,string> &profile = curmap->get_erasure_code_profile(pool.erasure_code_profile); 290 assert(profile.count("plugin")); 291 stringstream ss; >>> CID 1251446: Unchecked return value (CHECKED_RETURN) >>> Calling "factory" without checking return value (as is done elsewhere 8 out of 10 times). 292 ceph::ErasureCodePluginRegistry::instance().factory( 293 profile.find("plugin")->second, 294 profile, 295 &ec_impl, 296 ss); 297 assert(ec_impl); ________________________________________________________________________________________________________ *** CID 1251447: Data race condition (MISSING_LOCK) /os/FileJournal.cc: 614 in FileJournal::start_writer()() 608 } 609 610 611 void FileJournal::start_writer() 612 { 613 write_stop = false; >>> CID 1251447: Data race condition (MISSING_LOCK) >>> Accessing "this->aio_stop" without holding lock "Mutex._m". Elsewhere, "FileJournal.aio_stop" is accessed with "Mutex._m" held 1 out of 2 times (1 of these accesses strongly imply that it is necessary). 614 aio_stop = false; 615 write_thread.create(); 616 #ifdef HAVE_LIBAIO 617 if (aio) 618 write_finish_thread.create(); 619 #endif ________________________________________________________________________________________________________ *** CID 1251448: Resource leak (RESOURCE_LEAK) /test/librados/TestCase.cc: 282 in RadosTest::cleanup_namespace(void *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>)() 276 int r; 277 const char *entry = NULL; 278 const char *key = NULL; 279 while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, NULL)) != -ENOENT) { 280 ASSERT_EQ(0, r); 281 rados_ioctx_locator_set_key(ioctx, key); >>> CID 1251448: Resource leak (RESOURCE_LEAK) >>> Variable "list_ctx" going out of scope leaks the storage it points to. 282 ASSERT_EQ(0, rados_remove(ioctx, entry)); 283 } 284 rados_nobjects_list_close(list_ctx); 285 } 286 287 std::string RadosTestPP::pool_name; /test/librados/TestCase.cc: 275 in RadosTest::cleanup_namespace(void *, std::basic_string<char, std::char_traits<char>, std::allocator<char>>)() 269 270 void RadosTest::cleanup_namespace(rados_ioctx_t ioctx, std::string ns) 271 { 272 rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD); 273 rados_ioctx_set_namespace(ioctx, ns.c_str()); 274 rados_list_ctx_t list_ctx; >>> CID 1251448: Resource leak (RESOURCE_LEAK) >>> Variable "list_ctx" going out of scope leaks the storage it points to. 275 ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx)); 276 int r; 277 const char *entry = NULL; 278 const char *key = NULL; 279 while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, NULL)) != -ENOENT) { 280 ASSERT_EQ(0, r); ________________________________________________________________________________________________________ *** CID 1251449: Resource leak (RESOURCE_LEAK) /test/librados/TestCase.cc: 52 in RadosTestNS::cleanup_all_objects(void *)() 46 const char *key = NULL; 47 const char *nspace = NULL; 48 while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, &nspace)) != -ENOENT) { 49 ASSERT_EQ(0, r); 50 rados_ioctx_locator_set_key(ioctx, key); 51 rados_ioctx_set_namespace(ioctx, nspace); >>> CID 1251449: Resource leak (RESOURCE_LEAK) >>> Variable "list_ctx" going out of scope leaks the storage it points to. 52 ASSERT_EQ(0, rados_remove(ioctx, entry)); 53 } 54 rados_nobjects_list_close(list_ctx); 55 } 56 57 std::string RadosTestPPNS::pool_name; /test/librados/TestCase.cc: 43 in RadosTestNS::cleanup_all_objects(void *)() 37 void RadosTestNS::cleanup_all_objects(rados_ioctx_t ioctx) 38 { 39 // remove all objects to avoid polluting other tests 40 rados_ioctx_snap_set_read(ioctx, LIBRADOS_SNAP_HEAD); 41 rados_ioctx_set_namespace(ioctx, LIBRADOS_ALL_NSPACES); 42 rados_list_ctx_t list_ctx; >>> CID 1251449: Resource leak (RESOURCE_LEAK) >>> Variable "list_ctx" going out of scope leaks the storage it points to. 43 ASSERT_EQ(0, rados_nobjects_list_open(ioctx, &list_ctx)); 44 int r; 45 const char *entry = NULL; 46 const char *key = NULL; 47 const char *nspace = NULL; 48 while ((r = rados_nobjects_list_next(list_ctx, &entry, &key, &nspace)) != -ENOENT) { ________________________________________________________________________________________________________ *** CID 1251450: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 177 in TestLibRBD_CreateAndStat_Test::TestBody()() 171 librados::Rados TestLibRBD::_rados; 172 uint64_t TestLibRBD::_image_number = 0; 173 174 TEST_F(TestLibRBD, CreateAndStat) 175 { 176 rados_ioctx_t ioctx; >>> CID 1251450: Resource leak (RESOURCE_LEAK) >>> Variable "ioctx" going out of scope leaks the storage it points to. 177 ASSERT_EQ(0, rados_ioctx_create(_cluster, m_pool_name.c_str(), &ioctx)); 178 179 rbd_image_info_t info; 180 rbd_image_t image; 181 int order = 0; 182 std::string name = get_temp_image_name(); ________________________________________________________________________________________________________ *** CID 1251451: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 1288 in TestLibRBD_ListChildren_Test::TestBody()() 1282 std::string child_name1 = get_temp_image_name(); 1283 std::string child_name2 = get_temp_image_name(); 1284 std::string child_name3 = get_temp_image_name(); 1285 std::string child_name4 = get_temp_image_name(); 1286 1287 // make a parent to clone from >>> CID 1251451: Resource leak (RESOURCE_LEAK) >>> Variable "ioctx2" going out of scope leaks the storage it points to. 1288 ASSERT_EQ(0, create_image_full(ioctx1, parent_name.c_str(), 4<<20, &order, 1289 false, features)); 1290 ASSERT_EQ(0, rbd_open(ioctx1, parent_name.c_str(), &parent, NULL)); 1291 // create a snapshot, reopen as the parent we're interested in 1292 ASSERT_EQ(0, rbd_snap_create(parent, "parent_snap")); 1293 ASSERT_EQ(0, rbd_snap_set(parent, "parent_snap")); ________________________________________________________________________________________________________ *** CID 1251452: Resource leak (RESOURCE_LEAK) /test/librbd/test_librbd.cc: 1388 in TestLibRBD_ListChildrenTiered_Test::TestBody()() 1382 1383 int features = RBD_FEATURE_LAYERING; 1384 rbd_image_t parent; 1385 int order = 0; 1386 1387 // make a parent to clone from >>> CID 1251452: Resource leak (RESOURCE_LEAK) >>> Variable "ioctx2" going out of scope leaks the storage it points to. 1388 ASSERT_EQ(0, create_image_full(ioctx1, parent_name.c_str(), 4<<20, &order, 1389 false, features)); 1390 ASSERT_EQ(0, rbd_open(ioctx1, parent_name.c_str(), &parent, NULL)); 1391 // create a snapshot, reopen as the parent we're interested in 1392 ASSERT_EQ(0, rbd_snap_create(parent, "parent_snap")); 1393 ASSERT_EQ(0, rbd_snap_set(parent, "parent_snap")); ________________________________________________________________________________________________________ *** CID 1251453: Resource leak (RESOURCE_LEAK) /test/system/st_rados_list_objects.cc: 72 in StRadosListObjects::run()() 66 RETURN1_IF_NONZERO(rados_ioctx_create(cl, "foo", &io_ctx)); 67 68 int saw = 0; 69 const char *obj_name; 70 rados_list_ctx_t h; 71 printf("%s: listing objects.\n", get_id_str()); >>> CID 1251453: Resource leak (RESOURCE_LEAK) >>> Variable "io_ctx" going out of scope leaks the storage it points to. 72 RETURN1_IF_NONZERO(rados_nobjects_list_open(io_ctx, &h)); 73 while (true) { 74 int ret = rados_nobjects_list_next(h, &obj_name, NULL, NULL); 75 if (ret == -ENOENT) { 76 break; 77 } /test/system/st_rados_list_objects.cc: 82 in StRadosListObjects::run()() 76 break; 77 } 78 else if (ret != 0) { 79 if (m_accept_list_errors && (!m_midway_sem_post || saw > m_midway_cnt)) 80 break; 81 printf("%s: rados_objects_list_next error: %d\n", get_id_str(), ret); >>> CID 1251453: Resource leak (RESOURCE_LEAK) >>> Variable "io_ctx" going out of scope leaks the storage it points to. 82 return ret; 83 } 84 if ((saw % 25) == 0) { 85 printf("%s: listed object %d...\n", get_id_str(), saw); 86 } 87 ++saw; ________________________________________________________________________________________________________ *** CID 1251454: Resource leak (RESOURCE_LEAK) /test/system/st_rados_list_objects.cc: 82 in StRadosListObjects::run()() 76 break; 77 } 78 else if (ret != 0) { 79 if (m_accept_list_errors && (!m_midway_sem_post || saw > m_midway_cnt)) 80 break; 81 printf("%s: rados_objects_list_next error: %d\n", get_id_str(), ret); >>> CID 1251454: Resource leak (RESOURCE_LEAK) >>> Variable "h" going out of scope leaks the storage it points to. 82 return ret; 83 } 84 if ((saw % 25) == 0) { 85 printf("%s: listed object %d...\n", get_id_str(), saw); 86 } 87 ++saw; ________________________________________________________________________________________________________ *** CID 1251455: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() 294 { 295 stringstream path; 296 path << directory << "/" << chunk; 297 return path.str(); 298 } 299 >>> CID 1251455: Uncaught exception (UNCAUGHT_EXCEPT) >>> In function "main(int, char **)" an exception of type "ceph::FailedAssertion" is thrown and never caught. 300 int main(int argc, char** argv) { 301 ErasureCodeNonRegression non_regression; 302 int err = non_regression.setup(argc, argv); 303 if (err) 304 return err; 305 return non_regression.run(); /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() 294 { 295 stringstream path; 296 path << directory << "/" << chunk; 297 return path.str(); 298 } 299 >>> CID 1251455: Uncaught exception (UNCAUGHT_EXCEPT) >>> In function "main(int, char **)" an exception of type "ceph::FailedAssertion" is thrown and never caught. 300 int main(int argc, char** argv) { 301 ErasureCodeNonRegression non_regression; 302 int err = non_regression.setup(argc, argv); 303 if (err) 304 return err; 305 return non_regression.run(); ________________________________________________________________________________________________________ *** CID 1251456: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() 294 { 295 stringstream path; 296 path << directory << "/" << chunk; 297 return path.str(); 298 } 299 >>> CID 1251456: Uncaught exception (UNCAUGHT_EXCEPT) >>> In function "main(int, char **)" an exception of type "boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_lexical_cast> >" is thrown and never caught. 300 int main(int argc, char** argv) { 301 ErasureCodeNonRegression non_regression; 302 int err = non_regression.setup(argc, argv); 303 if (err) 304 return err; 305 return non_regression.run(); ________________________________________________________________________________________________________ *** CID 1251457: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() 294 { 295 stringstream path; 296 path << directory << "/" << chunk; 297 return path.str(); 298 } 299 >>> CID 1251457: Uncaught exception (UNCAUGHT_EXCEPT) >>> In function "main(int, char **)" an exception of type "boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >" is thrown and never caught. 300 int main(int argc, char** argv) { 301 ErasureCodeNonRegression non_regression; 302 int err = non_regression.setup(argc, argv); 303 if (err) 304 return err; 305 return non_regression.run(); ________________________________________________________________________________________________________ *** CID 1251458: Uncaught exception (UNCAUGHT_EXCEPT) /test/erasure-code/ceph_erasure_code_non_regression.cc: 300 in main() 294 { 295 stringstream path; 296 path << directory << "/" << chunk; 297 return path.str(); 298 } 299 >>> CID 1251458: Uncaught exception (UNCAUGHT_EXCEPT) >>> In function "main(int, char **)" an exception of type "boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_function_call> >" is thrown and never caught. 300 int main(int argc, char** argv) { 301 ErasureCodeNonRegression non_regression; 302 int err = non_regression.setup(argc, argv); 303 if (err) 304 return err; 305 return non_regression.run(); ________________________________________________________________________________________________________ *** CID 1251459: Uninitialized pointer field (UNINIT_CTOR) /test/librados/TestCase.h: 24 in RadosTestNS::RadosTestNS()() 18 * 19 * Since pool creation and deletion is slow, this allows many tests to 20 * run faster. 21 */ 22 class RadosTestNS : public ::testing::Test { 23 public: >>> CID 1251459: Uninitialized pointer field (UNINIT_CTOR) >>> Non-static class member "ioctx" is not initialized in this constructor nor in any functions that it calls. 24 RadosTestNS() {} 25 virtual ~RadosTestNS() {} 26 protected: 27 static void SetUpTestCase(); 28 static void TearDownTestCase(); 29 static void cleanup_all_objects(rados_ioctx_t ioctx); ________________________________________________________________________________________________________ *** CID 1251460: Uninitialized pointer field (UNINIT_CTOR) /test/librados/TestCase.h: 76 in RadosTestECNS::RadosTestECNS()() 70 librados::Rados &cluster; 71 librados::IoCtx ioctx; 72 }; 73 74 class RadosTestECNS : public RadosTestNS { 75 public: >>> CID 1251460: Uninitialized pointer field (UNINIT_CTOR) >>> Non-static class member "alignment" is not initialized in this constructor nor in any functions that it calls. 76 RadosTestECNS() {} 77 virtual ~RadosTestECNS() {} 78 protected: 79 static void SetUpTestCase(); 80 static void TearDownTestCase(); 81 static rados_t s_cluster; ________________________________________________________________________________________________________ *** CID 1251461: Uninitialized scalar field (UNINIT_CTOR) /test/librados/TestCase.h: 93 in RadosTestECPPNS::RadosTestECPPNS()() 87 rados_ioctx_t ioctx; 88 uint64_t alignment; 89 }; 90 91 class RadosTestECPPNS : public RadosTestPPNS { 92 public: >>> CID 1251461: Uninitialized scalar field (UNINIT_CTOR) >>> Non-static class member "alignment" is not initialized in this constructor nor in any functions that it calls. 93 RadosTestECPPNS() : cluster(s_cluster) {} 94 virtual ~RadosTestECPPNS() {} 95 protected: 96 static void SetUpTestCase(); 97 static void TearDownTestCase(); 98 static librados::Rados s_cluster; ________________________________________________________________________________________________________ *** CID 1251462: Use after free (USE_AFTER_FREE) /test/librbd/test_librbd.cc: 299 in test_ls(void *, unsigned long, ...)() 293 va_start(ap, num_expected); 294 for (i = num_expected; i > 0; i--) { 295 char *expected = va_arg(ap, char *); 296 printf("expected = %s\n", expected); 297 std::set<std::string>::iterator it = image_names.find(expected); 298 if (it != image_names.end()) { >>> CID 1251462: Use after free (USE_AFTER_FREE) >>> Passing freed pointer "cur_name" as an argument to "printf". 299 printf("found %s\n", cur_name); 300 image_names.erase(it); 301 } else { 302 ADD_FAILURE() << "Unable to find image " << expected; 303 return -ENOENT; 304 } ________________________________________________________________________________________________________ *** CID 1251463: Missing varargs init or cleanup (VARARGS) /test/librbd/test_librbd.cc: 303 in test_ls(void *, unsigned long, ...)() 297 std::set<std::string>::iterator it = image_names.find(expected); 298 if (it != image_names.end()) { 299 printf("found %s\n", cur_name); 300 image_names.erase(it); 301 } else { 302 ADD_FAILURE() << "Unable to find image " << expected; >>> CID 1251463: Missing varargs init or cleanup (VARARGS) >>> va_end was not called for "ap". 303 return -ENOENT; 304 } 305 } 306 va_end(ap); 307 308 if (!image_names.empty()) { ________________________________________________________________________________________________________ To view the defects in Coverity Scan visit, http://scan.coverity.com/projects/25?tab=overview To unsubscribe from the email notification for new defects, http://scan5.coverity.com/cgi-bin/unsubscribe.py -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html