ACK: [PATCH] dmicheck: checks (Extended) Maximum Capacity for type 16

Colin Ian King colin.king at canonical.com
Mon Sep 10 13:04:23 UTC 2018


On 05/09/18 02:27, Alex Hung wrote:
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
>  src/dmi/dmicheck/dmicheck.c | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c
> index 97305eca..cc8c2f46 100644
> --- a/src/dmi/dmicheck/dmicheck.c
> +++ b/src/dmi/dmicheck/dmicheck.c
> @@ -52,6 +52,7 @@
>  #define DMI_MGMT_CTRL_HOST_TYPE		"DMIMgmtCtrlHostType"
>  #define DMI_INVALID_ENTRY_LENGTH	"DMIInvalidEntryLength"
>  #define DMI_INVALID_HARDWARE_ENTRY	"DMIInvalidHardwareEntry"
> +#define DMI_INVALID_MEMORY_ENTRY	"DMIInvalidMemoryEntry"
>  #define DMI_RESERVED_VALUE_USED		"DMIReservedValueUsed"
>  #define DMI_RESERVED_BIT_USED		"DMIReservedBitUsed"
>  #define DMI_RESERVED_OFFSET_NONZERO	"DMIReservedOffsetNonZero"
> @@ -846,6 +847,28 @@ static void dmi_reserved_uint8_check(fwts_framework *fw,
>  	}
>  }
>  
> +static void dmi_min_max_uint32_check(fwts_framework *fw,
> +	const char *table,
> +	uint32_t addr,
> +	const char *field,
> +	const fwts_dmi_header *hdr,
> +	uint8_t offset,
> +	uint32_t min,
> +	uint32_t max)
> +{
> +	uint32_t val = GET_UINT32((hdr->data) + offset);
> +	if ((val < min) || (val > max)) {
> +		fwts_failed(fw, LOG_LEVEL_HIGH,
> +			DMI_VALUE_OUT_OF_RANGE,
> +			"Out of range value 0x%4.4" PRIx32
> +			" (range allowed 0x%4.4" PRIx32 "..0x%4.4" PRIx32 ") "
> +			"while accessing entry '%s' @ 0x%8.8" PRIx32
> +			", field '%s', offset 0x%2.2" PRIx8,
> +			val, min, max, table, addr, field, offset);
> +		dmi_out_of_range_advice(fw, hdr->type, offset);
> +	}
> +}
> +
>  static void dmi_min_max_uint16_check(fwts_framework *fw,
>  	const char *table,
>  	uint32_t addr,
> @@ -1459,6 +1482,13 @@ static void dmicheck_entry(fwts_framework *fw,
>  					data[0x4], table, addr, "Location", 0x4);
>  			dmi_min_max_uint8_check(fw, table, addr, "Use", hdr, 0x5, 0x1, 0x7);
>  			dmi_min_max_uint8_check(fw, table, addr, "Error Corrrection Type", hdr, 0x6, 0x1, 0x7);
> +			dmi_min_max_uint32_check(fw, table, addr, "Maximum Capacity", hdr, 0x7, 0, 0x80000000 - 1);
> +			if (hdr->length < 0x17)
> +				break;
> +			if (GET_UINT64(data + 0xf) != 0 && GET_UINT32(data + 0x7) != 0x80000000)
> +				fwts_failed(fw, LOG_LEVEL_HIGH, DMI_INVALID_MEMORY_ENTRY,
> +					"An illegal value 0x%16.16" PRIx64 " for entry '%s' "
> +					"@ 0x%8.8" PRIx32, GET_UINT64(data + 0xf), table, addr);
>  			break;
>  
>  		case 17: /* 7.18 */
> 

Acked-by: Colin Ian King <colin.king at canonical.com>



More information about the fwts-devel mailing list