Fix a possible null pointer dereference

- This commit would fix a potential null pointer dereference.

Signed-off-by: Manojkiran Eda <manojkiran.eda@gmail.com>
Change-Id: Ic323bde2c4bd35c35132e4310466cd6ae7ec7aeb
Signed-off-by: George Liu <liuxiwei@inspur.com>
diff --git a/libpldm/fru.c b/libpldm/fru.c
index 207d4de..3e0887d 100644
--- a/libpldm/fru.c
+++ b/libpldm/fru.c
@@ -177,13 +177,12 @@
 	size_t record_hdr_size = sizeof(struct pldm_fru_record_data_format) -
 				 sizeof(struct pldm_fru_record_tlv);
 
-	if ((*curr_size + record_hdr_size + tlvs_size) != total_size) {
-		return PLDM_ERROR_INVALID_LENGTH;
-	}
-
 	if (fru_table == NULL || curr_size == NULL || !tlvs_size) {
 		return PLDM_ERROR_INVALID_DATA;
 	}
+	if ((*curr_size + record_hdr_size + tlvs_size) != total_size) {
+		return PLDM_ERROR_INVALID_LENGTH;
+	}
 
 	struct pldm_fru_record_data_format *record =
 	    (struct pldm_fru_record_data_format *)(fru_table + *curr_size);
diff --git a/libpldmresponder/pdr_numeric_effecter.hpp b/libpldmresponder/pdr_numeric_effecter.hpp
index 9152320..ca6e5ad 100644
--- a/libpldmresponder/pdr_numeric_effecter.hpp
+++ b/libpldmresponder/pdr_numeric_effecter.hpp
@@ -38,6 +38,11 @@
 
         pldm_numeric_effecter_value_pdr* pdr =
             reinterpret_cast<pldm_numeric_effecter_value_pdr*>(entry.data());
+        if (!pdr)
+        {
+            std::cerr << "Failed to get numeric effecter PDR.\n";
+            continue;
+        }
         pdr->hdr.record_handle = 0;
         pdr->hdr.version = 1;
         pdr->hdr.type = PLDM_NUMERIC_EFFECTER_PDR;
diff --git a/libpldmresponder/pdr_state_effecter.hpp b/libpldmresponder/pdr_state_effecter.hpp
index aa0e912..0ddfdfa 100644
--- a/libpldmresponder/pdr_state_effecter.hpp
+++ b/libpldmresponder/pdr_state_effecter.hpp
@@ -57,6 +57,11 @@
 
         pldm_state_effecter_pdr* pdr =
             reinterpret_cast<pldm_state_effecter_pdr*>(entry.data());
+        if (!pdr)
+        {
+            std::cerr << "Failed to get state effecter PDR.\n";
+            continue;
+        }
         pdr->hdr.record_handle = 0;
         pdr->hdr.version = 1;
         pdr->hdr.type = PLDM_STATE_EFFECTER_PDR;
diff --git a/libpldmresponder/pdr_state_sensor.hpp b/libpldmresponder/pdr_state_sensor.hpp
index b94b297..5093dcf 100644
--- a/libpldmresponder/pdr_state_sensor.hpp
+++ b/libpldmresponder/pdr_state_sensor.hpp
@@ -56,6 +56,11 @@
 
         pldm_state_sensor_pdr* pdr =
             reinterpret_cast<pldm_state_sensor_pdr*>(entry.data());
+        if (!pdr)
+        {
+            std::cerr << "Failed to get state sensor PDR.\n";
+            continue;
+        }
         pdr->hdr.record_handle = 0;
         pdr->hdr.version = 1;
         pdr->hdr.type = PLDM_STATE_SENSOR_PDR;
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index 43e0de4..d595c2e 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -161,6 +161,7 @@
     {
         std::cerr << "Failed to get record by PDR type, ERROR:"
                   << PLDM_PLATFORM_INVALID_EFFECTER_ID << std::endl;
+        return;
     }
     pdr->hdr.record_handle = 0;
     pdr->hdr.version = 1;
@@ -211,6 +212,7 @@
     {
         std::cerr << "Failed to get record by PDR type, ERROR:"
                   << PLDM_PLATFORM_INVALID_SENSOR_ID << std::endl;
+        return;
     }
     pdr->hdr.record_handle = 0;
     pdr->hdr.version = 1;
diff --git a/pldmtool/pldm_platform_cmd.cpp b/pldmtool/pldm_platform_cmd.cpp
index 77bcb5b..2c4a6df 100644
--- a/pldmtool/pldm_platform_cmd.cpp
+++ b/pldmtool/pldm_platform_cmd.cpp
@@ -291,6 +291,11 @@
         data += sizeof(pldm_pdr_hdr);
         pldm_pdr_fru_record_set* pdr =
             reinterpret_cast<pldm_pdr_fru_record_set*>(data);
+        if (!pdr)
+        {
+            std::cerr << "Failed to get the FRU record set PDR" << std::endl;
+            return;
+        }
 
         output["PLDMTerminusHandle"] = unsigned(pdr->terminus_handle);
         output["FRURecordSetIdentifier"] = unsigned(pdr->fru_rsi);
@@ -314,6 +319,12 @@
         data += sizeof(pldm_pdr_hdr);
         pldm_pdr_entity_association* pdr =
             reinterpret_cast<pldm_pdr_entity_association*>(data);
+        if (!pdr)
+        {
+            std::cerr << "Failed to get the PDR eneity association"
+                      << std::endl;
+            return;
+        }
 
         output["containerID"] = int(pdr->container_id);
         output["associationType"] = assocationType.at(pdr->association_type);
@@ -346,6 +357,11 @@
     {
         struct pldm_numeric_effecter_value_pdr* pdr =
             (struct pldm_numeric_effecter_value_pdr*)data;
+        if (!pdr)
+        {
+            std::cerr << "Failed to get numeric effecter PDR" << std::endl;
+            return;
+        }
 
         output["PLDMTerminusHandle"] = int(pdr->terminus_handle);
         output["effecterID"] = int(pdr->effecter_id);
@@ -536,6 +552,7 @@
     {
         if (data == NULL)
         {
+            std::cerr << "Failed to get PDR message" << std::endl;
             return;
         }
 
@@ -544,6 +561,10 @@
         output["responseCount"] = respCnt;
 
         struct pldm_pdr_hdr* pdr = (struct pldm_pdr_hdr*)data;
+        if (!pdr)
+        {
+            return;
+        }
         printCommonPDRHeader(pdr, output);
 
         switch (pdr->type)
diff --git a/softoff/softoff.cpp b/softoff/softoff.cpp
index d215c1d..a704885 100644
--- a/softoff/softoff.cpp
+++ b/softoff/softoff.cpp
@@ -258,6 +258,12 @@
             pdr = reinterpret_cast<pldm_state_sensor_pdr*>(rep.data());
         }
 
+        if (!pdr)
+        {
+            std::cerr << "Failed to get state sensor PDR.\n";
+            return PLDM_ERROR;
+        }
+
         sensorID = pdr->sensor_id;
 
         auto compositeSensorCount = pdr->composite_sensor_count;