--- Begin Message ---
Hi,
Please find the latest report on new defect(s) introduced to ceph found with Coverity Scan.
Defect(s) Reported-by: Coverity Scan
Showing 15 of 15 defect(s)
** CID 1188299: Data race condition (MISSING_LOCK)
/mds/MDSUtility.cc: 142 in MDSUtility::handle_mds_map(MMDSMap *)()
** CID 717359: Uninitialized scalar field (UNINIT_CTOR)
/rgw/rgw_common.cc: 161 in req_state::req_state(CephContext *, RGWEnv *)()
** CID 1188131: Division or modulo by zero (DIVIDE_BY_ZERO)
/common/histogram.h: 97 in pow2_hist_t::get_position_micro(int, unsigned long *, unsigned long *)()
** CID 716921: Dereference after null check (FORWARD_NULL)
/mds/MDCache.cc: 6950 in MDCache::handle_cache_expire(MCacheExpire *)()
** CID 1188134: Unchecked dynamic_cast (FORWARD_NULL)
/osd/ReplicatedBackend.cc: 428 in RPGTransaction::append(PGBackend::PGTransaction *)()
** CID 1188135: Unchecked dynamic_cast (FORWARD_NULL)
/osd/ReplicatedBackend.cc: 494 in ReplicatedBackend::submit_transaction(const hobject_t &, const eversion_t &, PGBackend::PGTransaction *, const eversion_t &, std::vector<pg_log_entry_t, std::allocator<pg_log_entry_t>> &, Context *, Context *, Context *, unsigned long, osd_reqid_t, std::tr1::shared_ptr<OpRequest>)()
** CID 716990: Dereference null return value (NULL_RETURNS)
/mds/MDCache.cc: 10098 in MDCache::handle_discover(MDiscover *)()
** CID 1135931: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
** CID 1135933: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
** CID 1188126: Unchecked return value (CHECKED_RETURN)
/test/objectstore/store_test.cc: 564 in SyntheticWorkloadState::stat()()
** CID 1188145: Resource leak (RESOURCE_LEAK)
/osd/ReplicatedPG.cc: 5231 in ReplicatedPG::fill_in_copy_get(ReplicatedPG::OpContext *, ceph::buffer::list::iterator &, OSDOp &, std::tr1::shared_ptr<ObjectContext> &, bool)()
** CID 1188156: Resource leak (RESOURCE_LEAK)
/test/librados/c_write_operations.cc: 131 in LibRadosCWriteOps_Exec_Test::TestBody()()
/test/librados/c_write_operations.cc: 134 in LibRadosCWriteOps_Exec_Test::TestBody()()
/test/librados/c_write_operations.cc: 136 in LibRadosCWriteOps_Exec_Test::TestBody()()
/test/librados/c_write_operations.cc: 138 in LibRadosCWriteOps_Exec_Test::TestBody()()
/test/librados/c_write_operations.cc: 139 in LibRadosCWriteOps_Exec_Test::TestBody()()
** CID 1160848: Uninitialized scalar variable (UNINIT)
/osdc/Objecter.cc: 1519 in Objecter::recalc_op_target(Objecter::Op *)()
** CID 1030132: Uninitialized scalar variable (UNINIT)
/mon/PGMonitor.cc: 1979 in PGMonitor::dump_stuck_pg_stats(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &, ceph::Formatter *, int, 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>>>> &) const()
/mon/PGMonitor.cc: 1979 in PGMonitor::dump_stuck_pg_stats(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &, ceph::Formatter *, int, 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>>>> &) const()
** CID 1135932: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
________________________________________________________________________________________________________
*** CID 1188299: Data race condition (MISSING_LOCK)
/mds/MDSUtility.cc: 142 in MDSUtility::handle_mds_map(MMDSMap *)()
136
137 void MDSUtility::handle_mds_map(MMDSMap* m)
138 {
139 mdsmap->decode(m->get_encoded());
140 if (waiting_for_mds_map) {
141 waiting_for_mds_map->complete(0);
>>> CID 1188299: Data race condition (MISSING_LOCK)
>>> Accessing "this->waiting_for_mds_map" ("MDSUtility.waiting_for_mds_map") requires the "Mutex._m" lock.
142 waiting_for_mds_map = NULL;
143 }
144 }
145
146
147 bool MDSUtility::ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer,
________________________________________________________________________________________________________
*** CID 717359: Uninitialized scalar field (UNINIT_CTOR)
/rgw/rgw_common.cc: 161 in req_state::req_state(CephContext *, RGWEnv *)()
155 length = NULL;
156 copy_source = NULL;
157 http_auth = NULL;
158 local_source = false;
159
160 obj_ctx = NULL;
>>> CID 717359: Uninitialized scalar field (UNINIT_CTOR)
>>> Non-static class member "bucket_exists" is not initialized in this constructor nor in any functions that it calls.
161 }
162
163 req_state::~req_state() {
164 delete formatter;
165 delete bucket_acl;
166 delete object_acl;
________________________________________________________________________________________________________
*** CID 1188131: Division or modulo by zero (DIVIDE_BY_ZERO)
/common/histogram.h: 97 in pow2_hist_t::get_position_micro(int, unsigned long *, unsigned long *)()
91 if (i <= bin)
92 upper_sum += h[i];
93 if (i < bin)
94 lower_sum += h[i];
95 total += h[i];
96 }
>>> CID 1188131: Division or modulo by zero (DIVIDE_BY_ZERO)
>>> In expression "lower_sum * 1000000UL / total", division by expression "total" which may be zero has undefined behavior.
97 *lower = lower_sum * 1000000 / total;
98 *upper = upper_sum * 1000000 / total;
99 return 0;
100 }
101
102 void add(const pow2_hist_t& o) {
________________________________________________________________________________________________________
*** CID 716921: Dereference after null check (FORWARD_NULL)
/mds/MDCache.cc: 6950 in MDCache::handle_cache_expire(MCacheExpire *)()
6944 for (map<pair<string,snapid_t>,uint32_t>::iterator p = pd->second.begin();
6945 p != pd->second.end();
6946 ++p) {
6947 unsigned nonce = p->second;
6948 CDentry *dn;
6949
>>> CID 716921: Dereference after null check (FORWARD_NULL)
>>> Comparing "dir" to null implies that "dir" might be null.
6950 if (dir) {
6951 dn = dir->lookup(p->first.first, p->first.second);
6952 } else {
6953 // which dirfrag for this dentry?
6954 CDir *dir = diri->get_dirfrag(diri->pick_dirfrag(p->first.first));
6955 assert(dir);
________________________________________________________________________________________________________
*** CID 1188134: Unchecked dynamic_cast (FORWARD_NULL)
/osd/ReplicatedBackend.cc: 428 in RPGTransaction::append(PGBackend::PGTransaction *)()
422 }
423
424 void append(
425 PGTransaction *_to_append
426 ) {
427 RPGTransaction *to_append = dynamic_cast<RPGTransaction*>(_to_append);
>>> CID 1188134: Unchecked dynamic_cast (FORWARD_NULL)
>>> Dereferencing null pointer "to_append".
428 t->append(*(to_append->t));
429 for (set<hobject_t>::iterator i = to_append->temp_added.begin();
430 i != to_append->temp_added.end();
431 ++i) {
432 temp_cleared.erase(*i);
433 temp_added.insert(*i);
________________________________________________________________________________________________________
*** CID 1188135: Unchecked dynamic_cast (FORWARD_NULL)
/osd/ReplicatedBackend.cc: 494 in ReplicatedBackend::submit_transaction(const hobject_t &, const eversion_t &, PGBackend::PGTransaction *, const eversion_t &, std::vector<pg_log_entry_t, std::allocator<pg_log_entry_t>> &, Context *, Context *, Context *, unsigned long, osd_reqid_t, std::tr1::shared_ptr<OpRequest>)()
488 Context *on_all_acked,
489 Context *on_all_commit,
490 tid_t tid,
491 osd_reqid_t reqid,
492 OpRequestRef orig_op)
493 {
>>> CID 1188135: Unchecked dynamic_cast (FORWARD_NULL)
>>> Assigning: "t" = "dynamic_cast <RPGTransaction *>(_t)".
494 RPGTransaction *t = dynamic_cast<RPGTransaction*>(_t);
495 ObjectStore::Transaction *op_t = t->get_transaction();
496
497 assert(t->get_temp_added().size() <= 1);
498 assert(t->get_temp_cleared().size() <= 1);
499
________________________________________________________________________________________________________
*** CID 716990: Dereference null return value (NULL_RETURNS)
/mds/MDCache.cc: 10098 in MDCache::handle_discover(MDiscover *)()
10092 // wants root
10093 dout(7) << "handle_discover from mds." << from
10094 << " wants base + " << dis->get_want().get_path()
10095 << " snap " << snapid
10096 << dendl;
10097
>>> CID 716990: Dereference null return value (NULL_RETURNS)
>>> Assigning: "cur" = null return value from "MDCache::get_inode(inodeno_t, snapid_t)".
10098 cur = get_inode(dis->get_base_ino());
10099
10100 // add root
10101 reply->starts_with = MDiscoverReply::INODE;
10102 replicate_inode(cur, from, reply->trace);
10103 dout(10) << "added base " << *cur << dendl;
________________________________________________________________________________________________________
*** CID 1135931: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
1733 Context *ondisk;
1734 Context *onreadable_sync;
1735 ObjectStore::Transaction::collect_contexts(
1736 tls, &onreadable, &ondisk, &onreadable_sync);
1737 if (g_conf->filestore_blackhole) {
1738 dout(0) << "queue_transactions filestore_blackhole = TRUE, dropping transaction" << dendl;
>>> CID 1135931: Resource leak (RESOURCE_LEAK)
>>> Variable "ondisk" going out of scope leaks the storage it points to.
1739 return 0;
1740 }
1741
1742 // set up the sequencer
1743 OpSequencer *osr;
1744 if (!posr)
________________________________________________________________________________________________________
*** CID 1135933: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
1733 Context *ondisk;
1734 Context *onreadable_sync;
1735 ObjectStore::Transaction::collect_contexts(
1736 tls, &onreadable, &ondisk, &onreadable_sync);
1737 if (g_conf->filestore_blackhole) {
1738 dout(0) << "queue_transactions filestore_blackhole = TRUE, dropping transaction" << dendl;
>>> CID 1135933: Resource leak (RESOURCE_LEAK)
>>> Variable "onreadable_sync" going out of scope leaks the storage it points to.
1739 return 0;
1740 }
1741
1742 // set up the sequencer
1743 OpSequencer *osr;
1744 if (!posr)
________________________________________________________________________________________________________
*** CID 1188126: Unchecked return value (CHECKED_RETURN)
/test/objectstore/store_test.cc: 564 in SyntheticWorkloadState::stat()()
558 hoid = get_uniform_random_object();
559 in_flight_objects.insert(hoid);
560 available_objects.erase(hoid);
561 ++in_flight;
562 }
563 struct stat buf;
>>> CID 1188126: Unchecked return value (CHECKED_RETURN)
>>> No check of the return value of "this->store->stat(coll_t(this->cid), hoid, &buf, false)".
564 store->stat(cid, hoid, &buf);
565 ASSERT_TRUE(buf.st_size == contents[hoid].length());
566 {
567 Mutex::Locker locker(lock);
568 --in_flight;
569 cond.Signal();
________________________________________________________________________________________________________
*** CID 1188145: Resource leak (RESOURCE_LEAK)
/osd/ReplicatedPG.cc: 5231 in ReplicatedPG::fill_in_copy_get(ReplicatedPG::OpContext *, ceph::buffer::list::iterator &, OSDOp &, std::tr1::shared_ptr<ObjectContext> &, bool)()
5225 if (!cursor.attr_complete) {
5226 result = getattrs_maybe_cache(
5227 ctx->obc,
5228 &out_attrs,
5229 true);
5230 if (result < 0)
>>> CID 1188145: Resource leak (RESOURCE_LEAK)
>>> Variable "cb" going out of scope leaks the storage it points to.
5231 return result;
5232 cursor.attr_complete = true;
5233 dout(20) << " got attrs" << dendl;
5234 }
5235
5236 int64_t left = out_max - osd_op.outdata.length();
________________________________________________________________________________________________________
*** CID 1188156: Resource leak (RESOURCE_LEAK)
/test/librados/c_write_operations.cc: 131 in LibRadosCWriteOps_Exec_Test::TestBody()()
125
126 int rval = 1;
127 rados_write_op_t op = rados_create_write_op();
128 rados_write_op_exec(op, "hello", "record_hello", "test", 4, &rval);
129 ASSERT_EQ(0, rados_write_op_operate(op, ioctx, "test", NULL, 0));
130 rados_release_write_op(op);
>>> CID 1188156: Resource leak (RESOURCE_LEAK)
>>> Variable "ioctx" going out of scope leaks the storage it points to.
131 ASSERT_EQ(0, rval);
132
133 char hi[100];
134 ASSERT_EQ(12, rados_read(ioctx, "test", hi, 100, 0));
135 hi[12] = '\0';
136 ASSERT_EQ(0, strcmp("Hello, test!", hi));
137
138 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
/test/librados/c_write_operations.cc: 134 in LibRadosCWriteOps_Exec_Test::TestBody()()
128 rados_write_op_exec(op, "hello", "record_hello", "test", 4, &rval);
129 ASSERT_EQ(0, rados_write_op_operate(op, ioctx, "test", NULL, 0));
130 rados_release_write_op(op);
131 ASSERT_EQ(0, rval);
132
133 char hi[100];
>>> CID 1188156: Resource leak (RESOURCE_LEAK)
>>> Variable "ioctx" going out of scope leaks the storage it points to.
134 ASSERT_EQ(12, rados_read(ioctx, "test", hi, 100, 0));
135 hi[12] = '\0';
136 ASSERT_EQ(0, strcmp("Hello, test!", hi));
137
138 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
/test/librados/c_write_operations.cc: 136 in LibRadosCWriteOps_Exec_Test::TestBody()()
130 rados_release_write_op(op);
131 ASSERT_EQ(0, rval);
132
133 char hi[100];
134 ASSERT_EQ(12, rados_read(ioctx, "test", hi, 100, 0));
135 hi[12] = '\0';
>>> CID 1188156: Resource leak (RESOURCE_LEAK)
>>> Variable "ioctx" going out of scope leaks the storage it points to.
136 ASSERT_EQ(0, strcmp("Hello, test!", hi));
137
138 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
/test/librados/c_write_operations.cc: 138 in LibRadosCWriteOps_Exec_Test::TestBody()()
132
133 char hi[100];
134 ASSERT_EQ(12, rados_read(ioctx, "test", hi, 100, 0));
135 hi[12] = '\0';
136 ASSERT_EQ(0, strcmp("Hello, test!", hi));
137
>>> CID 1188156: Resource leak (RESOURCE_LEAK)
>>> Variable "ioctx" going out of scope leaks the storage it points to.
138 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
/test/librados/c_write_operations.cc: 139 in LibRadosCWriteOps_Exec_Test::TestBody()()
133 char hi[100];
134 ASSERT_EQ(12, rados_read(ioctx, "test", hi, 100, 0));
135 hi[12] = '\0';
136 ASSERT_EQ(0, strcmp("Hello, test!", hi));
137
138 ASSERT_EQ(0, destroy_one_pool(pool_name, &cluster));
>>> CID 1188156: Resource leak (RESOURCE_LEAK)
>>> Variable "ioctx" going out of scope leaks the storage it points to.
________________________________________________________________________________________________________
*** CID 1160848: Uninitialized scalar variable (UNINIT)
/osdc/Objecter.cc: 1519 in Objecter::recalc_op_target(Objecter::Op *)()
1513 best = i;
1514 best_locality = locality;
1515 if (i)
1516 op->used_replica = true;
1517 }
1518 }
>>> CID 1160848: Uninitialized scalar variable (UNINIT)
>>> Using uninitialized value "best".
1519 assert(best >= 0);
1520 osd = acting[best];
1521 } else {
1522 osd = primary;
1523 }
1524 s = get_session(osd);
________________________________________________________________________________________________________
*** CID 1030132: Uninitialized scalar variable (UNINIT)
/mon/PGMonitor.cc: 1979 in PGMonitor::dump_stuck_pg_stats(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &, ceph::Formatter *, int, 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>>>> &) const()
1973
1974 int PGMonitor::dump_stuck_pg_stats(stringstream &ds,
1975 Formatter *f,
1976 int threshold,
1977 vector<string>& args) const
1978 {
>>> CID 1030132: Uninitialized scalar variable (UNINIT)
>>> Declaring variable "stuck_type" without initializer.
1979 PGMap::StuckPG stuck_type;
1980 string type = args[0];
1981 if (type == "inactive")
1982 stuck_type = PGMap::STUCK_INACTIVE;
1983 if (type == "unclean")
1984 stuck_type = PGMap::STUCK_UNCLEAN;
/mon/PGMonitor.cc: 1979 in PGMonitor::dump_stuck_pg_stats(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char>> &, ceph::Formatter *, int, 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>>>> &) const()
1973
1974 int PGMonitor::dump_stuck_pg_stats(stringstream &ds,
1975 Formatter *f,
1976 int threshold,
1977 vector<string>& args) const
1978 {
>>> CID 1030132: Uninitialized scalar variable (UNINIT)
>>> Declaring variable "stuck_type" without initializer.
1979 PGMap::StuckPG stuck_type;
1980 string type = args[0];
1981 if (type == "inactive")
1982 stuck_type = PGMap::STUCK_INACTIVE;
1983 if (type == "unclean")
1984 stuck_type = PGMap::STUCK_UNCLEAN;
________________________________________________________________________________________________________
*** CID 1135932: Resource leak (RESOURCE_LEAK)
/os/FileStore.cc: 1739 in FileStore::queue_transactions(ObjectStore::Sequencer *, std::list<ObjectStore::Transaction *, std::allocator<ObjectStore::Transaction *>> &, std::tr1::shared_ptr<TrackedOp>, ThreadPool::TPHandle *)()
1733 Context *ondisk;
1734 Context *onreadable_sync;
1735 ObjectStore::Transaction::collect_contexts(
1736 tls, &onreadable, &ondisk, &onreadable_sync);
1737 if (g_conf->filestore_blackhole) {
1738 dout(0) << "queue_transactions filestore_blackhole = TRUE, dropping transaction" << dendl;
>>> CID 1135932: Resource leak (RESOURCE_LEAK)
>>> Variable "onreadable" going out of scope leaks the storage it points to.
1739 return 0;
1740 }
1741
1742 // set up the sequencer
1743 OpSequencer *osr;
1744 if (!posr)
________________________________________________________________________________________________________
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
--- End Message ---