diff --git a/CHANGELOG.md b/CHANGELOG.md
index 01f67e7..3d4255a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -43,6 +43,7 @@
 - Returned error values for the following stable APIs have changed their
   semantics:
 
+  - `decode_descriptor_type_length_value()`
   - `decode_event_message_buffer_size_resp()`
   - `decode_get_numeric_effecter_value_resp()`
   - `decode_get_sensor_reading_resp()`
diff --git a/src/dsp/firmware_update.c b/src/dsp/firmware_update.c
index b94f019..534d068 100644
--- a/src/dsp/firmware_update.c
+++ b/src/dsp/firmware_update.c
@@ -326,19 +326,18 @@
 	}
 }
 
-LIBPLDM_ABI_STABLE
-int decode_pldm_package_header_info(
+static int decode_pldm_package_header_info_errno(
 	const uint8_t *data, size_t length,
 	struct pldm_package_header_information *package_header_info,
 	struct variable_field *package_version_str)
 {
 	if (data == NULL || package_header_info == NULL ||
 	    package_version_str == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (length < sizeof(struct pldm_package_header_information)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	struct pldm_package_header_information *data_header =
@@ -346,17 +345,17 @@
 
 	if (!is_string_type_valid(data_header->package_version_string_type) ||
 	    (data_header->package_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	if (length < sizeof(struct pldm_package_header_information) +
 			     data_header->package_version_string_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	if ((data_header->component_bitmap_bit_length %
 	     PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) != 0) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	memcpy(package_header_info->uuid, data_header->uuid,
@@ -379,11 +378,27 @@
 	package_version_str->length =
 		package_header_info->package_version_string_length;
 
-	return PLDM_SUCCESS;
+	return 0;
 }
 
 LIBPLDM_ABI_STABLE
-int decode_firmware_device_id_record(
+int decode_pldm_package_header_info(
+	const uint8_t *data, size_t length,
+	struct pldm_package_header_information *package_header_info,
+	struct variable_field *package_version_str)
+{
+	int rc;
+
+	rc = decode_pldm_package_header_info_errno(
+		data, length, package_header_info, package_version_str);
+	if (rc < 0) {
+		return pldm_xlate_errno(rc);
+	}
+
+	return PLDM_SUCCESS;
+}
+
+static int decode_firmware_device_id_record_errno(
 	const uint8_t *data, size_t length,
 	uint16_t component_bitmap_bit_length,
 	struct pldm_firmware_device_id_record *fw_device_id_record,
@@ -396,16 +411,16 @@
 	    applicable_components == NULL ||
 	    comp_image_set_version_str == NULL || record_descriptors == NULL ||
 	    fw_device_pkg_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (length < sizeof(struct pldm_firmware_device_id_record)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	if ((component_bitmap_bit_length %
 	     PLDM_FWUP_COMPONENT_BITMAP_MULTIPLE) != 0) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	struct pldm_firmware_device_id_record *data_record =
@@ -414,7 +429,7 @@
 	if (!is_string_type_valid(
 		    data_record->comp_image_set_version_string_type) ||
 	    (data_record->comp_image_set_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	fw_device_id_record->record_length =
@@ -430,7 +445,7 @@
 		le16toh(data_record->fw_device_pkg_data_length);
 
 	if (length < fw_device_id_record->record_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	uint16_t applicable_components_length =
@@ -444,7 +459,7 @@
 		fw_device_id_record->fw_device_pkg_data_length;
 
 	if (fw_device_id_record->record_length < calc_min_record_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	applicable_components->ptr =
@@ -472,6 +487,29 @@
 			fw_device_id_record->fw_device_pkg_data_length;
 	}
 
+	return 0;
+}
+
+LIBPLDM_ABI_STABLE
+int decode_firmware_device_id_record(
+	const uint8_t *data, size_t length,
+	uint16_t component_bitmap_bit_length,
+	struct pldm_firmware_device_id_record *fw_device_id_record,
+	struct variable_field *applicable_components,
+	struct variable_field *comp_image_set_version_str,
+	struct variable_field *record_descriptors,
+	struct variable_field *fw_device_pkg_data)
+{
+	int rc;
+
+	rc = decode_firmware_device_id_record_errno(
+		data, length, component_bitmap_bit_length, fw_device_id_record,
+		applicable_components, comp_image_set_version_str,
+		record_descriptors, fw_device_pkg_data);
+	if (rc < 0) {
+		return pldm_xlate_errno(rc);
+	}
+
 	return PLDM_SUCCESS;
 }
 
@@ -509,20 +547,19 @@
 	return pldm_msgbuf_destroy(buf);
 }
 
-LIBPLDM_ABI_STABLE
-int decode_descriptor_type_length_value(const uint8_t *data, size_t length,
-					uint16_t *descriptor_type,
-					struct variable_field *descriptor_data)
+static int decode_descriptor_type_length_value_errno(
+	const uint8_t *data, size_t length, uint16_t *descriptor_type,
+	struct variable_field *descriptor_data)
 {
 	uint16_t descriptor_length = 0;
 
 	if (data == NULL || descriptor_type == NULL ||
 	    descriptor_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (length < PLDM_FWUP_DEVICE_DESCRIPTOR_MIN_LEN) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	struct pldm_descriptor_tlv *entry =
@@ -533,34 +570,49 @@
 	if (*descriptor_type != PLDM_FWUP_VENDOR_DEFINED) {
 		if (descriptor_length !=
 		    get_descriptor_type_length(*descriptor_type)) {
-			return PLDM_ERROR_INVALID_LENGTH;
+			return -EBADMSG;
 		}
 	}
 
 	if (length < (sizeof(*descriptor_type) + sizeof(descriptor_length) +
 		      descriptor_length)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	descriptor_data->ptr = entry->descriptor_data;
 	descriptor_data->length = descriptor_length;
 
-	return PLDM_SUCCESS;
+	return 0;
 }
 
 LIBPLDM_ABI_STABLE
-int decode_vendor_defined_descriptor_value(
+int decode_descriptor_type_length_value(const uint8_t *data, size_t length,
+					uint16_t *descriptor_type,
+					struct variable_field *descriptor_data)
+{
+	int rc;
+
+	rc = decode_descriptor_type_length_value_errno(
+		data, length, descriptor_type, descriptor_data);
+	if (rc < 0) {
+		return pldm_xlate_errno(rc);
+	}
+
+	return PLDM_SUCCESS;
+}
+
+static int decode_vendor_defined_descriptor_value_errno(
 	const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
 	struct variable_field *descriptor_title_str,
 	struct variable_field *descriptor_data)
 {
 	if (data == NULL || descriptor_title_str_type == NULL ||
 	    descriptor_title_str == NULL || descriptor_data == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (length < sizeof(struct pldm_vendor_defined_descriptor_title_data)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	struct pldm_vendor_defined_descriptor_title_data *entry =
@@ -568,13 +620,13 @@
 	if (!is_string_type_valid(
 		    entry->vendor_defined_descriptor_title_str_type) ||
 	    (entry->vendor_defined_descriptor_title_str_len == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	// Assuming at least 1 byte of VendorDefinedDescriptorData
 	if (length < (sizeof(struct pldm_vendor_defined_descriptor_title_data) +
 		      entry->vendor_defined_descriptor_title_str_len)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	*descriptor_title_str_type =
@@ -591,22 +643,39 @@
 		sizeof(entry->vendor_defined_descriptor_title_str_len) -
 		descriptor_title_str->length;
 
-	return PLDM_SUCCESS;
+	return 0;
 }
 
 LIBPLDM_ABI_STABLE
-int decode_pldm_comp_image_info(
+int decode_vendor_defined_descriptor_value(
+	const uint8_t *data, size_t length, uint8_t *descriptor_title_str_type,
+	struct variable_field *descriptor_title_str,
+	struct variable_field *descriptor_data)
+{
+	int rc;
+
+	rc = decode_vendor_defined_descriptor_value_errno(
+		data, length, descriptor_title_str_type, descriptor_title_str,
+		descriptor_data);
+	if (rc < 0) {
+		return pldm_xlate_errno(rc);
+	}
+
+	return PLDM_SUCCESS;
+}
+
+static int decode_pldm_comp_image_info_errno(
 	const uint8_t *data, size_t length,
 	struct pldm_component_image_information *pldm_comp_image_info,
 	struct variable_field *comp_version_str)
 {
 	if (data == NULL || pldm_comp_image_info == NULL ||
 	    comp_version_str == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (length < sizeof(struct pldm_component_image_information)) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	struct pldm_component_image_information *data_header =
@@ -614,12 +683,12 @@
 
 	if (!is_string_type_valid(data_header->comp_version_string_type) ||
 	    (data_header->comp_version_string_length == 0)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	if (length < sizeof(struct pldm_component_image_information) +
 			     data_header->comp_version_string_length) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EOVERFLOW;
 	}
 
 	pldm_comp_image_info->comp_classification =
@@ -643,12 +712,12 @@
 	if ((pldm_comp_image_info->comp_options.bits.bit1 == false &&
 	     pldm_comp_image_info->comp_comparison_stamp !=
 		     PLDM_FWUP_INVALID_COMPONENT_COMPARISON_TIMESTAMP)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	if (pldm_comp_image_info->comp_location_offset == 0 ||
 	    pldm_comp_image_info->comp_size == 0) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	comp_version_str->ptr =
@@ -656,6 +725,23 @@
 	comp_version_str->length =
 		pldm_comp_image_info->comp_version_string_length;
 
+	return 0;
+}
+
+LIBPLDM_ABI_STABLE
+int decode_pldm_comp_image_info(
+	const uint8_t *data, size_t length,
+	struct pldm_component_image_information *pldm_comp_image_info,
+	struct variable_field *comp_version_str)
+{
+	int rc;
+
+	rc = decode_pldm_comp_image_info_errno(
+		data, length, pldm_comp_image_info, comp_version_str);
+	if (rc < 0) {
+		return pldm_xlate_errno(rc);
+	}
+
 	return PLDM_SUCCESS;
 }
 
diff --git a/tests/dsp/firmware_update.cpp b/tests/dsp/firmware_update.cpp
index b4f6f92..78f81db 100644
--- a/tests/dsp/firmware_update.cpp
+++ b/tests/dsp/firmware_update.cpp
@@ -612,7 +612,7 @@
     rc = decode_descriptor_type_length_value(invalidIANADescriptor1.data(),
                                              invalidIANADescriptor1.size(),
                                              &descriptorType, &descriptorData);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
+    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
 
     // IANA Enterprise ID descriptor data less than length
     std::array<uint8_t, 7> invalidIANADescriptor2{0x01, 0x00, 0x04, 0x00,
