diff --git a/oem/ibm/libpldm/file_io.c b/oem/ibm/libpldm/file_io.c
index fd96f1c..7806ae6 100644
--- a/oem/ibm/libpldm/file_io.c
+++ b/oem/ibm/libpldm/file_io.c
@@ -2,7 +2,7 @@
 #include <endian.h>
 #include <string.h>
 
-int decode_rw_file_memory_req(const uint8_t *msg, size_t payload_length,
+int decode_rw_file_memory_req(const struct pldm_msg *msg, size_t payload_length,
 			      uint32_t *file_handle, uint32_t *offset,
 			      uint32_t *length, uint64_t *address)
 {
@@ -16,7 +16,7 @@
 	}
 
 	struct pldm_read_write_file_memory_req *request =
-	    (struct pldm_read_write_file_memory_req *)msg;
+	    (struct pldm_read_write_file_memory_req *)msg->payload;
 
 	*file_handle = le32toh(request->file_handle);
 	*offset = le32toh(request->offset);
@@ -81,8 +81,9 @@
 	return PLDM_SUCCESS;
 }
 
-int decode_rw_file_memory_resp(const uint8_t *msg, size_t payload_length,
-			       uint8_t *completion_code, uint32_t *length)
+int decode_rw_file_memory_resp(const struct pldm_msg *msg,
+			       size_t payload_length, uint8_t *completion_code,
+			       uint32_t *length)
 {
 	if (msg == NULL || length == NULL || completion_code == NULL) {
 		return PLDM_ERROR_INVALID_DATA;
@@ -93,7 +94,7 @@
 	}
 
 	struct pldm_read_write_file_memory_resp *response =
-	    (struct pldm_read_write_file_memory_resp *)msg;
+	    (struct pldm_read_write_file_memory_resp *)msg->payload;
 	*completion_code = response->completion_code;
 	if (*completion_code == PLDM_SUCCESS) {
 		*length = le32toh(response->length);
@@ -102,7 +103,7 @@
 	return PLDM_SUCCESS;
 }
 
-int decode_get_file_table_req(const uint8_t *msg, size_t payload_length,
+int decode_get_file_table_req(const struct pldm_msg *msg, size_t payload_length,
 			      uint32_t *transfer_handle,
 			      uint8_t *transfer_opflag, uint8_t *table_type)
 {
@@ -116,7 +117,7 @@
 	}
 
 	struct pldm_get_file_table_req *request =
-	    (struct pldm_get_file_table_req *)msg;
+	    (struct pldm_get_file_table_req *)msg->payload;
 
 	*transfer_handle = le32toh(request->transfer_handle);
 	*transfer_opflag = request->operation_flag;
diff --git a/oem/ibm/libpldm/file_io.h b/oem/ibm/libpldm/file_io.h
index 64f203c..b3a0f73 100644
--- a/oem/ibm/libpldm/file_io.h
+++ b/oem/ibm/libpldm/file_io.h
@@ -66,7 +66,7 @@
 /** @brief Decode ReadFileIntoMemory and WriteFileFromMemory commands request
  *         data
  *
- *  @param[in] msg - Pointer to PLDM request message payload
+ *  @param[in] msg - Pointer to PLDM request message
  *  @param[in] payload_length - Length of request payload
  *  @param[out] file_handle - A handle to the file
  *  @param[out] offset - Offset to the file at which the read should begin
@@ -75,7 +75,7 @@
  *                        written to
  *  @return pldm_completion_codes
  */
-int decode_rw_file_memory_req(const uint8_t *msg, size_t payload_length,
+int decode_rw_file_memory_req(const struct pldm_msg *msg, size_t payload_length,
 			      uint32_t *file_handle, uint32_t *offset,
 			      uint32_t *length, uint64_t *address);
 
@@ -116,14 +116,15 @@
 /** @brief Decode ReadFileIntoMemory and WriteFileFromMemory
  *         commands response data
  *
- *  @param[in] msg - pointer to PLDM response message payload
+ *  @param[in] msg - pointer to PLDM response message
  *  @param[in] payload_length - Length of response payload
  *  @param[out] completion_code - PLDM completion code
  *  @param[out] length - Number of bytes to be read/written
  *  @return pldm_completion_codes
  */
-int decode_rw_file_memory_resp(const uint8_t *msg, size_t payload_length,
-			       uint8_t *completion_code, uint32_t *length);
+int decode_rw_file_memory_resp(const struct pldm_msg *msg,
+			       size_t payload_length, uint8_t *completion_code,
+			       uint32_t *length);
 
 /** @struct pldm_get_file_table_req
  *
@@ -148,14 +149,14 @@
 
 /** @brief Decode GetFileTable command request data
  *
- *  @param[in] msg - Pointer to PLDM request message payload
+ *  @param[in] msg - Pointer to PLDM request message
  *  @param[in] payload_length - Length of request payload
  *  @param[out] trasnfer_handle - the handle of data
  *  @param[out] transfer_opflag - Transfer operation flag
  *  @param[out] table_type - the type of file table
  *  @return pldm_completion_codes
  */
-int decode_get_file_table_req(const uint8_t *msg, size_t payload_length,
+int decode_get_file_table_req(const struct pldm_msg *msg, size_t payload_length,
 			      uint32_t *transfer_handle,
 			      uint8_t *transfer_opflag, uint8_t *table_type);
 
diff --git a/oem/ibm/libpldmresponder/file_io.cpp b/oem/ibm/libpldmresponder/file_io.cpp
index 6fa9f48..a3a81b4 100644
--- a/oem/ibm/libpldmresponder/file_io.cpp
+++ b/oem/ibm/libpldmresponder/file_io.cpp
@@ -172,8 +172,8 @@
         return response;
     }
 
-    decode_rw_file_memory_req(request->payload, payloadLength, &fileHandle,
-                              &offset, &length, &address);
+    decode_rw_file_memory_req(request, payloadLength, &fileHandle, &offset,
+                              &length, &address);
 
     using namespace pldm::filetable;
     auto& table = buildFileTable(FILE_TABLE_JSON);
@@ -253,8 +253,8 @@
         return response;
     }
 
-    decode_rw_file_memory_req(request->payload, payloadLength, &fileHandle,
-                              &offset, &length, &address);
+    decode_rw_file_memory_req(request, payloadLength, &fileHandle, &offset,
+                              &length, &address);
 
     if (length % dma::minSize)
     {
@@ -329,9 +329,8 @@
         return response;
     }
 
-    auto rc =
-        decode_get_file_table_req(request->payload, payloadLength,
-                                  &transferHandle, &transferFlag, &tableType);
+    auto rc = decode_get_file_table_req(request, payloadLength, &transferHandle,
+                                        &transferFlag, &tableType);
     if (rc)
     {
         encode_get_file_table_resp(request->hdr.instance_id, rc, 0, 0, nullptr,
diff --git a/oem/ibm/test/libpldm_fileio_test.cpp b/oem/ibm/test/libpldm_fileio_test.cpp
index 085d105..de766b1 100644
--- a/oem/ibm/test/libpldm_fileio_test.cpp
+++ b/oem/ibm/test/libpldm_fileio_test.cpp
@@ -7,9 +7,11 @@
 
 #include <gtest/gtest.h>
 
+constexpr auto hdrSize = sizeof(pldm_msg_hdr);
+
 TEST(ReadWriteFileMemory, testGoodDecodeRequest)
 {
-    std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES> requestMsg{};
+    std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES + hdrSize> requestMsg{};
 
     // Random value for fileHandle, offset, length, address
     uint32_t fileHandle = 0x12345678;
@@ -17,12 +19,13 @@
     uint32_t length = 0x13245768;
     uint64_t address = 0x124356879ACBDE0F;
 
-    memcpy(requestMsg.data(), &fileHandle, sizeof(fileHandle));
-    memcpy(requestMsg.data() + sizeof(fileHandle), &offset, sizeof(offset));
-    memcpy(requestMsg.data() + sizeof(fileHandle) + sizeof(offset), &length,
-           sizeof(length));
+    memcpy(requestMsg.data() + hdrSize, &fileHandle, sizeof(fileHandle));
+    memcpy(requestMsg.data() + sizeof(fileHandle) + hdrSize, &offset,
+           sizeof(offset));
+    memcpy(requestMsg.data() + sizeof(fileHandle) + sizeof(offset) + hdrSize,
+           &length, sizeof(length));
     memcpy(requestMsg.data() + sizeof(fileHandle) + sizeof(offset) +
-               sizeof(length),
+               sizeof(length) + hdrSize,
            &address, sizeof(address));
 
     uint32_t retFileHandle = 0;
@@ -30,8 +33,10 @@
     uint32_t retLength = 0;
     uint64_t retAddress = 0;
 
+    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+
     // Invoke decode the read file memory request
-    auto rc = decode_rw_file_memory_req(requestMsg.data(), requestMsg.size(),
+    auto rc = decode_rw_file_memory_req(request, requestMsg.size() - hdrSize,
                                         &retFileHandle, &retOffset, &retLength,
                                         &retAddress);
 
@@ -56,14 +61,16 @@
 
     std::array<uint8_t, PLDM_RW_FILE_MEM_REQ_BYTES> requestMsg{};
 
+    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+
     // Address is NULL
-    rc = decode_rw_file_memory_req(requestMsg.data(), requestMsg.size(),
+    rc = decode_rw_file_memory_req(request, requestMsg.size() - hdrSize,
                                    &fileHandle, &offset, &length, NULL);
     ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
 
     // Payload length is invalid
-    rc = decode_rw_file_memory_req(requestMsg.data(), 0, &fileHandle, &offset,
-                                   &length, &address);
+    rc = decode_rw_file_memory_req(request, 0, &fileHandle, &offset, &length,
+                                   &address);
     ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
 }
 
@@ -133,20 +140,23 @@
 
 TEST(ReadWriteFileIntoMemory, testGoodDecodeResponse)
 {
-    std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES> responseMsg{};
+    std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES + hdrSize> responseMsg{};
     // Random value for length
     uint32_t length = 0xFF00EE12;
     uint8_t completionCode = 0;
 
-    memcpy(responseMsg.data(), &completionCode, sizeof(completionCode));
-    memcpy(responseMsg.data() + sizeof(completionCode), &length,
+    memcpy(responseMsg.data() + hdrSize, &completionCode,
+           sizeof(completionCode));
+    memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize, &length,
            sizeof(length));
 
     uint8_t retCompletionCode = 0;
     uint32_t retLength = 0;
 
+    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
+
     // Invoke decode the read file memory response
-    auto rc = decode_rw_file_memory_resp(responseMsg.data(), responseMsg.size(),
+    auto rc = decode_rw_file_memory_resp(response, responseMsg.size() - hdrSize,
                                          &retCompletionCode, &retLength);
     ASSERT_EQ(rc, PLDM_SUCCESS);
     ASSERT_EQ(completionCode, retCompletionCode);
@@ -164,9 +174,10 @@
 
     std::array<uint8_t, PLDM_RW_FILE_MEM_RESP_BYTES> responseMsg{};
 
+    auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
+
     // Payload length is invalid
-    rc = decode_rw_file_memory_resp(responseMsg.data(), 0, &completionCode,
-                                    &length);
+    rc = decode_rw_file_memory_resp(response, 0, &completionCode, &length);
     ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
 }
 
@@ -219,25 +230,29 @@
 
 TEST(GetFileTable, GoodDecodeRequest)
 {
-    std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES> requestMsg{};
+    std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES + hdrSize> requestMsg{};
 
     // Random value for DataTransferHandle, TransferOperationFlag, TableType
     uint32_t transferHandle = 0x12345678;
     uint8_t transferOpFlag = 1;
     uint8_t tableType = 1;
 
-    memcpy(requestMsg.data(), &transferHandle, sizeof(transferHandle));
-    memcpy(requestMsg.data() + sizeof(transferHandle), &transferOpFlag,
-           sizeof(transferOpFlag));
-    memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(transferOpFlag),
+    memcpy(requestMsg.data() + hdrSize, &transferHandle,
+           sizeof(transferHandle));
+    memcpy(requestMsg.data() + sizeof(transferHandle) + hdrSize,
+           &transferOpFlag, sizeof(transferOpFlag));
+    memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(transferOpFlag) +
+               hdrSize,
            &tableType, sizeof(tableType));
 
     uint32_t retTransferHandle = 0;
     uint8_t retTransferOpFlag = 0;
     uint8_t retTableType = 0;
 
+    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+
     // Invoke decode get file table request
-    auto rc = decode_get_file_table_req(requestMsg.data(), requestMsg.size(),
+    auto rc = decode_get_file_table_req(request, requestMsg.size() - hdrSize,
                                         &retTransferHandle, &retTransferOpFlag,
                                         &retTableType);
 
@@ -260,14 +275,16 @@
 
     std::array<uint8_t, PLDM_GET_FILE_TABLE_REQ_BYTES> requestMsg{};
 
+    auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
+
     // TableType is NULL
-    rc = decode_get_file_table_req(requestMsg.data(), requestMsg.size(),
+    rc = decode_get_file_table_req(request, requestMsg.size() - hdrSize,
                                    &transferHandle, &transferOpFlag, nullptr);
     ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
 
     // Payload length is invalid
-    rc = decode_get_file_table_req(requestMsg.data(), 0, &transferHandle,
-                                   &transferOpFlag, &tableType);
+    rc = decode_get_file_table_req(request, 0, &transferHandle, &transferOpFlag,
+                                   &tableType);
     ASSERT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
 }
 
