diff options
author | Ed Tanous <ed@tanous.net> | 2024-04-12 08:21:38 +0300 |
---|---|---|
committer | Ed Tanous <ed@tanous.net> | 2024-04-13 18:28:14 +0300 |
commit | 8e8245db1812bb0ec294a1c9a97c3a65558840ed (patch) | |
tree | 3c0d049cd5eddb5ff8e7364129dab0aac1278678 | |
parent | 6f056f246d9bcfd611102ee712d4a2935504b448 (diff) | |
download | bmcweb-8e8245db1812bb0ec294a1c9a97c3a65558840ed.tar.xz |
Fix nullptr failures for image upload
Several places that call *req.ioService were missing nullptr checks.
Add them, and fix the one case where it might not be filled in.
Tested: With HTTP2 enabled, the following command succeeds.
```
curl -k https://192.168.7.2/redfish/v1/UpdateService/update -F 'UpdateParameters={"Targets":["/redfish/v1/Managers/bmc"]} ;type=application/json' --user "root:0penBmc" -F UpdateFile=@/home/ed/bmcweb/16mb.txt -v -H "Expect:"
```
Change-Id: I81e7944c22f5922d461bf5d231086c7468a16e62
Signed-off-by: Ed Tanous <ed@tanous.net>
-rw-r--r-- | http/http2_connection.hpp | 2 | ||||
-rw-r--r-- | include/image_upload.hpp | 6 | ||||
-rw-r--r-- | redfish-core/lib/certificate_service.hpp | 6 | ||||
-rw-r--r-- | redfish-core/lib/update_service.hpp | 6 |
4 files changed, 20 insertions, 0 deletions
diff --git a/http/http2_connection.hpp b/http/http2_connection.hpp index d5f4481700..3e0c3943d5 100644 --- a/http/http2_connection.hpp +++ b/http/http2_connection.hpp @@ -246,6 +246,8 @@ class HTTP2Connection : } } crow::Request& thisReq = it->second.req; + thisReq.ioService = static_cast<decltype(thisReq.ioService)>( + &adaptor.get_executor().context()); BMCWEB_LOG_DEBUG("Handling {} \"{}\"", logPtr(&thisReq), thisReq.url().encoded_path()); diff --git a/include/image_upload.hpp b/include/image_upload.hpp index ef615cb3b8..8b3dc107c9 100644 --- a/include/image_upload.hpp +++ b/include/image_upload.hpp @@ -31,6 +31,12 @@ inline void asyncResp->res.result(boost::beast::http::status::service_unavailable); return; } + if (req.ioService == nullptr) + { + asyncResp->res.result( + boost::beast::http::status::internal_server_error); + return; + } // Make this const static so it survives outside this method static boost::asio::steady_timer timeout(*req.ioService, std::chrono::seconds(5)); diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp index 5dc4413821..6fba827371 100644 --- a/redfish-core/lib/certificate_service.hpp +++ b/redfish-core/lib/certificate_service.hpp @@ -766,6 +766,12 @@ inline void return; } + if (req.ioService == nullptr) + { + messages::internalError(asyncResp->res); + return; + } + // Make this static so it survives outside this method static boost::asio::steady_timer timeout(*req.ioService); timeout.expires_after(std::chrono::seconds(timeOut)); diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp index 9ef8311984..8617071e45 100644 --- a/redfish-core/lib/update_service.hpp +++ b/redfish-core/lib/update_service.hpp @@ -405,6 +405,12 @@ static void monitorForSoftwareAvailable( return; } + if (req.ioService == nullptr) + { + messages::internalError(asyncResp->res); + return; + } + fwAvailableTimer = std::make_unique<boost::asio::steady_timer>(*req.ioService); |