[PATCH] drm/amdgpu: Fix FRU data checking
Alex Deucher
alexdeucher at gmail.com
Tue Mar 24 15:34:24 UTC 2020
On Tue, Mar 24, 2020 at 7:49 AM Kent Russell <kent.russell at amd.com> wrote:
>
> Ensure that when we memcpy, we don't end up copying more data than
> the struct supports. For now, this is 16 characters for product number
> and serial number, and 32 chars for product name
>
> Signed-off-by: Kent Russell <kent.russell at amd.com>
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> .../gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 21 +++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> index 6f5e98fda181..bfe4259f9508 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c
> @@ -116,6 +116,13 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
> return size;
> }
>
> + /* Product name should only be 32 characters. Any more,
> + * and something could be wrong. Cap it at 32 to be safe
> + */
> + if (size > 32) {
> + DRM_WARN("FRU Product Number is larger than 32 characters. This is likely a mistake");
> + size = 32;
> + }
> /* Start at 2 due to buff using fields 0 and 1 for the address */
> memcpy(adev->product_name, &buff[2], size);
> adev->product_name[size] = '\0';
> @@ -127,6 +134,13 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
> return size;
> }
>
> + /* Product number should only be 16 characters. Any more,
> + * and something could be wrong. Cap it at 16 to be safe
> + */
> + if (size > 16) {
> + DRM_WARN("FRU Product Number is larger than 16 characters. This is likely a mistake");
> + size = 16;
> + }
> memcpy(adev->product_number, &buff[2], size);
> adev->product_number[size] = '\0';
>
> @@ -146,6 +160,13 @@ int amdgpu_fru_get_product_info(struct amdgpu_device *adev)
> return size;
> }
>
> + /* Serial number should only be 16 characters. Any more,
> + * and something could be wrong. Cap it at 16 to be safe
> + */
> + if (size > 16) {
> + DRM_WARN("FRU Serial Number is larger than 16 characters. This is likely a mistake");
> + size = 16;
> + }
> memcpy(adev->serial, &buff[2], size);
> adev->serial[size] = '\0';
>
> --
> 2.17.1
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list