fw-update : Migrate to placement_new from reinterpret casting

reinterpret_cast is prohibited by the C++ core guidelines because
it takes the behavior outside the language definition and gives
problems with type safety. Placement-new on the other-hand allows
to control the object storage while still properly instantiating
an object,keeping the behavior inside the C++ language
specification.

Change-Id: Id5d75d41a83fbbae109506a8059e756596ba1cbc
Signed-off-by: Pavithra Barithaya <pavithrabarithaya07@gmail.com>
diff --git a/fw-update/device_updater.cpp b/fw-update/device_updater.cpp
index 91217d6..644883e 100644
--- a/fw-update/device_updater.cpp
+++ b/fw-update/device_updater.cpp
@@ -38,7 +38,7 @@
     Request request(
         sizeof(pldm_msg_hdr) + sizeof(struct pldm_request_update_req) +
         compImgSetVerStrInfo.length);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_request_update_req(
         instanceId, maxTransferSize, applicableComponents.size(),
@@ -168,7 +168,7 @@
     Request request(
         sizeof(pldm_msg_hdr) + sizeof(struct pldm_pass_component_table_req) +
         compVerStrInfo.length);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
     auto rc = encode_pass_component_table_req(
         instanceId, transferFlag, compClassification, compIdentifier,
         compClassificationIndex, compComparisonStamp, PLDM_STR_TYPE_ASCII,
@@ -296,7 +296,7 @@
     Request request(
         sizeof(pldm_msg_hdr) + sizeof(struct pldm_update_component_req) +
         compVerStrInfo.length);
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_update_component_req(
         instanceId, compClassification, compIdentifier, compClassificationIndex,
@@ -372,7 +372,7 @@
     uint32_t offset = 0;
     uint32_t length = 0;
     Response response(sizeof(pldm_msg_hdr) + sizeof(completionCode), 0);
-    auto responseMsg = reinterpret_cast<pldm_msg*>(response.data());
+    auto responseMsg = new (response.data()) pldm_msg;
     auto rc = decode_request_firmware_data_req(request, payloadLength, &offset,
                                                &length);
     if (rc)
@@ -434,7 +434,7 @@
     }
 
     response.resize(sizeof(pldm_msg_hdr) + sizeof(completionCode) + length);
-    responseMsg = reinterpret_cast<pldm_msg*>(response.data());
+    responseMsg = new (response.data()) pldm_msg;
     package.seekg(compOffset + offset);
     package.read(
         reinterpret_cast<char*>(
@@ -459,7 +459,7 @@
 {
     uint8_t completionCode = PLDM_SUCCESS;
     Response response(sizeof(pldm_msg_hdr) + sizeof(completionCode), 0);
-    auto responseMsg = reinterpret_cast<pldm_msg*>(response.data());
+    auto responseMsg = new (response.data()) pldm_msg;
 
     uint8_t transferResult = 0;
     auto rc =
@@ -518,7 +518,7 @@
 {
     uint8_t completionCode = PLDM_SUCCESS;
     Response response(sizeof(pldm_msg_hdr) + sizeof(completionCode), 0);
-    auto responseMsg = reinterpret_cast<pldm_msg*>(response.data());
+    auto responseMsg = new (response.data()) pldm_msg;
 
     uint8_t verifyResult = 0;
     auto rc = decode_verify_complete_req(request, payloadLength, &verifyResult);
@@ -576,7 +576,7 @@
 {
     uint8_t completionCode = PLDM_SUCCESS;
     Response response(sizeof(pldm_msg_hdr) + sizeof(completionCode), 0);
-    auto responseMsg = reinterpret_cast<pldm_msg*>(response.data());
+    auto responseMsg = new (response.data()) pldm_msg;
 
     uint8_t applyResult = 0;
     bitfield16_t compActivationModification{};
@@ -654,7 +654,7 @@
     auto instanceId = updateManager->instanceIdDb.next(eid);
     Request request(
         sizeof(pldm_msg_hdr) + sizeof(struct pldm_activate_firmware_req));
-    auto requestMsg = reinterpret_cast<pldm_msg*>(request.data());
+    auto requestMsg = new (request.data()) pldm_msg;
 
     auto rc = encode_activate_firmware_req(
         instanceId, PLDM_NOT_ACTIVATE_SELF_CONTAINED_COMPONENTS, requestMsg,
diff --git a/fw-update/inventory_manager.cpp b/fw-update/inventory_manager.cpp
index 021c4ec..98d56d1 100644
--- a/fw-update/inventory_manager.cpp
+++ b/fw-update/inventory_manager.cpp
@@ -542,7 +542,7 @@
     auto instanceId = instanceIdDb.next(eid);
     Request requestMsg(
         sizeof(pldm_msg_hdr) + PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES);
-    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+    auto request = new (requestMsg.data()) pldm_msg;
     auto rc = encode_get_firmware_parameters_req(
         instanceId, PLDM_GET_FIRMWARE_PARAMETERS_REQ_BYTES, request);
     if (rc)
diff --git a/fw-update/update_manager.cpp b/fw-update/update_manager.cpp
index 2567996..66539d5 100644
--- a/fw-update/update_manager.cpp
+++ b/fw-update/update_manager.cpp
@@ -239,7 +239,7 @@
         }
         else
         {
-            auto ptr = reinterpret_cast<pldm_msg*>(response.data());
+            auto ptr = new (response.data()) pldm_msg;
             auto rc = encode_cc_only_resp(
                 request->hdr.instance_id, request->hdr.type,
                 request->hdr.command, PLDM_ERROR_INVALID_DATA, ptr);
@@ -248,7 +248,7 @@
     }
     else
     {
-        auto ptr = reinterpret_cast<pldm_msg*>(response.data());
+        auto ptr = new (response.data()) pldm_msg;
         auto rc = encode_cc_only_resp(request->hdr.instance_id,
                                       request->hdr.type, +request->hdr.command,
                                       PLDM_FWUP_COMMAND_NOT_EXPECTED, ptr);