From: Oshrey Avraham Date: Mon, 18 Nov 2024 10:06:22 +0000 (+0200) Subject: rgw/notification: fix segmentation fault and topic listing logic X-Git-Tag: v20.0.0~655^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d27dab240d568a705ff45e2231be650673279ebe;p=ceph.git rgw/notification: fix segmentation fault and topic listing logic - Fixed a segmentation fault caused by a null bucket pointer in RGWPSListTopicsOp::execute() - Corrected logic to use get_topics_v2 when supported, with fallback otherwise Fixes: https://tracker.ceph.com/issues/68756 Signed-off-by: Oshrey Avraham --- diff --git a/src/rgw/rgw_rest_pubsub.cc b/src/rgw/rgw_rest_pubsub.cc index c0345a4f88a3..adfc86d87cb5 100644 --- a/src/rgw/rgw_rest_pubsub.cc +++ b/src/rgw/rgw_rest_pubsub.cc @@ -494,11 +494,11 @@ void RGWPSListTopicsOp::execute(optional_yield y) { const RGWPubSub ps(driver, get_account_or_tenant(s->owner.id), *s->penv.site); if (rgw::all_zonegroups_support(*s->penv.site, rgw::zone_features::notification_v2) && - driver->stat_topics_v1(s->bucket->get_tenant(), null_yield, this) == -ENOENT) { - op_ret = ps.get_topics_v1(this, result, y); - } else { + driver->stat_topics_v1(get_account_or_tenant(s->owner.id), null_yield, this) == -ENOENT) { constexpr int max_items = 100; op_ret = ps.get_topics_v2(this, start_token, max_items, result, next_token, y); + } else { + op_ret = ps.get_topics_v1(this, result, y); } // if there are no topics it is not considered an error op_ret = op_ret == -ENOENT ? 0 : op_ret;