]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: nfs: svc-enable RGWLib 27232/head
authorMatt Benjamin <mbenjamin@redhat.com>
Thu, 14 Mar 2019 21:25:20 +0000 (17:25 -0400)
committerPrashant D <pdhange@redhat.com>
Thu, 28 Mar 2019 02:35:38 +0000 (22:35 -0400)
Add minimal svc_sys_obj.h boilerplate to RGWLibRequest.  Fix a
trivial illegal access from RGWPutObjProcessor's RadosWriter
when the request object is not stack allocated.

Fixes: https://tracker.ceph.com/issues/38769
Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
(cherry picked from commit e9b095def446cf39f0b5466303bce7d3737bbba7)

src/rgw/rgw_lib.h
src/rgw/rgw_putobj_processor.h

index ce5a27a00a38f5f92c98f677f215a33cfe5274ff..357133b0a6af99b2318599b5da647def570c24d2 100644 (file)
@@ -129,6 +129,7 @@ namespace rgw {
   public:
     CephContext* cct;
     RGWUserInfo* user;
+    boost::optional<RGWSysObjectCtx> sysobj_ctx;
 
     /* unambiguiously return req_state */
     inline struct req_state* get_state() { return this->RGWRequest::s; }
@@ -159,7 +160,10 @@ namespace rgw {
       RGWRequest::init_state(_s);
       RGWHandler::init(rados_ctx->get_store(), _s, io);
 
+      sysobj_ctx.emplace(store->svc.sysobj);
+
       get_state()->obj_ctx = rados_ctx;
+      get_state()->sysobj_ctx = &(sysobj_ctx.get());
       get_state()->req_id = store->svc.zone_utils->unique_id(id);
       get_state()->trans_id = store->svc.zone_utils->unique_trans_id(id);
 
@@ -195,7 +199,10 @@ namespace rgw {
        RGWRequest::init_state(&rstate);
        RGWHandler::init(rados_ctx.get_store(), &rstate, &io_ctx);
 
+       sysobj_ctx.emplace(store->svc.sysobj);
+
        get_state()->obj_ctx = &rados_ctx;
+       get_state()->sysobj_ctx = &(sysobj_ctx.get());
        get_state()->req_id = store->svc.zone_utils->unique_id(id);
        get_state()->trans_id = store->svc.zone_utils->unique_trans_id(id);
 
index 6fd36c009e48f7b93a4ea375b3c7c4722a79f7cd..8d265f172bc4ca8db508df3a3a17a61ed0d5d7b1 100644 (file)
@@ -80,7 +80,7 @@ class RadosWriter : public DataProcessor {
   RGWRados *const store;
   const RGWBucketInfo& bucket_info;
   RGWObjectCtx& obj_ctx;
-  const rgw_obj& head_obj;
+  const rgw_obj head_obj;
   RGWSI_RADOS::Obj stripe_obj; // current stripe object
   RawObjSet written; // set of written objects for deletion