| From 25ea5a34abadb9fccc9ce2cc812d7425addddbe3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 29 Oct 2022 14:30:44 +1300 |
| Subject: drm/amdgpu: Replace one-element array with flexible-array member |
| |
| From: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com> |
| |
| [ Upstream commit 320e2590e281d0a7865e861f50155b5b435e9813 ] |
| |
| One-element arrays are deprecated, and we are replacing them with |
| flexible array members instead. So, replace one-element array with |
| flexible-array member in struct _ATOM_FAKE_EDID_PATCH_RECORD and |
| refactor the rest of the code accordingly. |
| |
| Important to mention is that doing a build before/after this patch |
| results in no binary output differences. |
| |
| This helps with the ongoing efforts to tighten the FORTIFY_SOURCE |
| routines on memcpy() and help us make progress towards globally |
| enabling -fstrict-flex-arrays=3 [1]. |
| |
| Link: https://github.com/KSPP/linux/issues/79 |
| Link: https://github.com/KSPP/linux/issues/238 |
| Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836 [1] |
| |
| Signed-off-by: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Stable-dep-of: 8155566a26b8 ("drm/amdgpu: properly handle vbios fake edid sizing") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | 7 +++++-- |
| drivers/gpu/drm/amd/include/atombios.h | 2 +- |
| 2 files changed, 6 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c |
| index 1e94a9b652f70..754d1e1387155 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c |
| @@ -2113,8 +2113,11 @@ amdgpu_atombios_encoder_get_lcd_info(struct amdgpu_encoder *encoder) |
| } |
| } |
| record += fake_edid_record->ucFakeEDIDLength ? |
| - fake_edid_record->ucFakeEDIDLength + 2 : |
| - sizeof(ATOM_FAKE_EDID_PATCH_RECORD); |
| + struct_size(fake_edid_record, |
| + ucFakeEDIDString, |
| + fake_edid_record->ucFakeEDIDLength) : |
| + /* empty fake edid record must be 3 bytes long */ |
| + sizeof(ATOM_FAKE_EDID_PATCH_RECORD) + 1; |
| break; |
| case LCD_PANEL_RESOLUTION_RECORD_TYPE: |
| panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record; |
| diff --git a/drivers/gpu/drm/amd/include/atombios.h b/drivers/gpu/drm/amd/include/atombios.h |
| index 8ba21747b40a3..c9f70accd46d8 100644 |
| --- a/drivers/gpu/drm/amd/include/atombios.h |
| +++ b/drivers/gpu/drm/amd/include/atombios.h |
| @@ -4107,7 +4107,7 @@ typedef struct _ATOM_FAKE_EDID_PATCH_RECORD |
| { |
| UCHAR ucRecordType; |
| UCHAR ucFakeEDIDLength; // = 128 means EDID length is 128 bytes, otherwise the EDID length = ucFakeEDIDLength*128 |
| - UCHAR ucFakeEDIDString[1]; // This actually has ucFakeEdidLength elements. |
| + UCHAR ucFakeEDIDString[]; // This actually has ucFakeEdidLength elements. |
| } ATOM_FAKE_EDID_PATCH_RECORD; |
| |
| typedef struct _ATOM_PANEL_RESOLUTION_PATCH_RECORD |
| -- |
| 2.43.0 |
| |