]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/http: finish_request() after logging errors 59243/head
authorCasey Bodley <cbodley@redhat.com>
Thu, 15 Aug 2024 17:46:07 +0000 (13:46 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 15 Aug 2024 17:46:09 +0000 (13:46 -0400)
the http manager's background thread is processing responses and logging
any errors. but its call to finish_request() -> complete_request() drops
its reference with req_data->put() before logging the error message in
req_data->error_buf. if put() dropped the last reference, we'd access
error_buf after it's freed

Fixes: https://tracker.ceph.com/issues/67522
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_http_client.cc

index 9f448bfc355a92af19ca4e2019a5acf46acab010..d3f4b7a4fadf9843987317bc7264fab293de4fd0 100644 (file)
@@ -1147,7 +1147,6 @@ void *RGWHTTPManager::reqs_thread_entry()
           http_status = err.http_ret;
         }
         int id = req_data->id;
-       finish_request(req_data, status, http_status);
         switch (result) {
           case CURLE_OK:
             break;
@@ -1160,6 +1159,7 @@ void *RGWHTTPManager::reqs_thread_entry()
             dout(20) << "ERROR: curl error: " << curl_easy_strerror((CURLcode)result) << " req_data->error_buf=" << req_data->error_buf << dendl;
            break;
         }
+       finish_request(req_data, status, http_status);
       }
     }
   }