This commit fixes a segmentation fault when using --pgid
option in rados ls command in combination with --pool/-p option.
The reason for the crash was that we can not use the rados object
before connecting it with the cluster using rados.init_with_context().
Fixes: https://tracker.ceph.com/issues/41875
Signed-off-by: Vikhyat Umrao <vumrao@redhat.com>
(cherry picked from commit
56b6dd9bd7a50371062128122e6a899f2c79c5f5)
with_reference = true;
}
- i = opts.find("pgid");
- boost::optional<pg_t> pgid(i != opts.end(), pg_t());
- if (pgid && (!pgid->parse(i->second.c_str()) || (pool_name && rados.pool_lookup(pool_name) != pgid->pool()))) {
- cerr << "invalid pgid" << std::endl;
- return 1;
- }
-
// open rados
ret = rados.init_with_context(g_ceph_context);
if (ret < 0) {
}
}
+ i = opts.find("pgid");
+ boost::optional<pg_t> pgid(i != opts.end(), pg_t());
+ if (pgid && (!pgid->parse(i->second.c_str()) || (pool_name && rados.pool_lookup(pool_name) != pgid->pool()))) {
+ cerr << "invalid pgid" << std::endl;
+ return 1;
+ }
+
// open io context.
if (pool_name || pgid) {
ret = pool_name ? rados.ioctx_create(pool_name, io_ctx) : rados.ioctx_create2(pgid->pool(), io_ctx);