requester: Add check before accessing hdr in pldm_recv()

Fixes "pldmSoftPowerOff.service: Main process exited, code=dumped,
status=11/SEGV".

Signed-off-by: Rashmica Gupta <rashmica@linux.ibm.com>
Change-Id: I198b1bac8c4c849cb1b8756f070fd5aa62c24f24
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2372eaa..cf66e0f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -49,3 +49,4 @@
 1. requester: Make pldm_open() return existing fd
 2. transport: Prevent sticking in waiting for response
 3. transport: Match on response in pldm_transport_send_recv_msg()
+4. requester: Add check before accessing hdr in pldm_recv()
diff --git a/src/requester/pldm.c b/src/requester/pldm.c
index b50dbbf..45179f4 100644
--- a/src/requester/pldm.c
+++ b/src/requester/pldm.c
@@ -104,7 +104,8 @@
 	pldm_requester_rc_t rc =
 		pldm_recv_any(eid, mctp_fd, pldm_resp_msg, resp_msg_len);
 	struct pldm_msg_hdr *hdr = (struct pldm_msg_hdr *)(*pldm_resp_msg);
-	if (hdr->instance_id != instance_id) {
+	if (rc == PLDM_REQUESTER_SUCCESS && hdr &&
+	    hdr->instance_id != instance_id) {
 		free(*pldm_resp_msg);
 		*pldm_resp_msg = NULL;
 		return PLDM_REQUESTER_INSTANCE_ID_MISMATCH;