From: Alex Deucher <alexdeucher@gmail.com> To: Kees Cook <keescook@chromium.org> Cc: linux-kbuild@vger.kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-staging@lists.linux.dev, Linux Wireless List <linux-wireless@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>, Maling list - DRI developers <dri-devel@lists.freedesktop.org>, "Gustavo A. R. Silva" <gustavoars@kernel.org>, linux-block@vger.kernel.org, clang-built-linux <clang-built-linux@googlegroups.com>, Keith Packard <keithpac@amazon.com>, linux-hardening@vger.kernel.org, Network Development <netdev@vger.kernel.org>, Andrew Morton <akpm@linux-foundation.org> Subject: Re: [PATCH 23/64] drm/amd/pm: Use struct_group() for memcpy() region Date: Thu, 29 Jul 2021 22:07:29 -0400 [thread overview] Message-ID: <CADnq5_Npb8uYvd+R4UHgf-w8-cQj3JoODjviJR_Y9w9wqJ71mQ@mail.gmail.com> (raw) In-Reply-To: <20210727205855.411487-24-keescook@chromium.org> On Tue, Jul 27, 2021 at 5:17 PM Kees Cook <keescook@chromium.org> wrote: > > In preparation for FORTIFY_SOURCE performing compile-time and run-time > field bounds checking for memcpy(), memmove(), and memset(), avoid > intentionally writing across neighboring fields. > > Use struct_group() in structs: > struct atom_smc_dpm_info_v4_5 > struct atom_smc_dpm_info_v4_6 > struct atom_smc_dpm_info_v4_7 > struct atom_smc_dpm_info_v4_10 > PPTable_t > so the grouped members can be referenced together. This will allow > memcpy() and sizeof() to more easily reason about sizes, improve > readability, and avoid future warnings about writing beyond the end of > the first member. > > "pahole" shows no size nor member offset changes to any structs. > "objdump -d" shows no object code changes. These headers represent interfaces with firmware running on microcontrollers, so if the sizes or offsets change that could cause a problem. That doesn't seem to be the case, but something to keep in mind. Patch is: Acked-by: Alex Deucher <alexander.deucher@amd.com> Feel free to take this through whatever tree makes sense. Alex > > Signed-off-by: Kees Cook <keescook@chromium.org> > --- > drivers/gpu/drm/amd/include/atomfirmware.h | 9 ++++++++- > .../gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h | 3 ++- > drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h | 3 ++- > .../gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h | 3 ++- > drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 6 +++--- > drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 12 ++++++++---- > drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 6 +++--- > 7 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h > index 3811e58dd857..694dee9d2691 100644 > --- a/drivers/gpu/drm/amd/include/atomfirmware.h > +++ b/drivers/gpu/drm/amd/include/atomfirmware.h > @@ -2081,6 +2081,7 @@ struct atom_smc_dpm_info_v4_5 > { > struct atom_common_table_header table_header; > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // I2C Control > struct smudpm_i2c_controller_config_v2 I2cControllers[8]; > > @@ -2159,7 +2160,7 @@ struct atom_smc_dpm_info_v4_5 > uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) > > uint32_t BoardReserved[9]; > - > + ); > }; > > struct atom_smc_dpm_info_v4_6 > @@ -2168,6 +2169,7 @@ struct atom_smc_dpm_info_v4_6 > // section: board parameters > uint32_t i2c_padding[3]; // old i2c control are moved to new area > > + struct_group(dpm_info, > uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. > uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. > > @@ -2246,12 +2248,14 @@ struct atom_smc_dpm_info_v4_6 > > // reserved > uint32_t boardreserved[10]; > + ); > }; > > struct atom_smc_dpm_info_v4_7 > { > struct atom_common_table_header table_header; > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // I2C Control > struct smudpm_i2c_controller_config_v2 I2cControllers[8]; > > @@ -2348,6 +2352,7 @@ struct atom_smc_dpm_info_v4_7 > uint8_t Padding8_Psi2; > > uint32_t BoardReserved[5]; > + ); > }; > > struct smudpm_i2c_controller_config_v3 > @@ -2478,6 +2483,7 @@ struct atom_smc_dpm_info_v4_10 > struct atom_common_table_header table_header; > > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // Telemetry Settings > uint16_t GfxMaxCurrent; // in Amps > uint8_t GfxOffset; // in Amps > @@ -2524,6 +2530,7 @@ struct atom_smc_dpm_info_v4_10 > uint16_t spare5; > > uint32_t reserved[16]; > + ); > }; > > /* > diff --git a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > index 43d43d6addc0..8093a98800c3 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > @@ -643,6 +643,7 @@ typedef struct { > // SECTION: BOARD PARAMETERS > > // SVI2 Board Parameters > + struct_group(v4_6, > uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. > uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. > > @@ -728,10 +729,10 @@ typedef struct { > uint32_t BoardVoltageCoeffB; // decode by /1000 > > uint32_t BoardReserved[7]; > + ); > > // Padding for MMHUB - do not modify this > uint32_t MmHubPadding[8]; // SMU internal use > - > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > index 04752ade1016..0b4e6e907e95 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > @@ -725,6 +725,7 @@ typedef struct { > uint32_t Reserved[8]; > > // SECTION: BOARD PARAMETERS > + struct_group(v4, > // I2C Control > I2cControllerConfig_t I2cControllers[NUM_I2C_CONTROLLERS]; > > @@ -809,10 +810,10 @@ typedef struct { > uint8_t Padding8_Loadline; > > uint32_t BoardReserved[8]; > + ); > > // Padding for MMHUB - do not modify this > uint32_t MmHubPadding[8]; // SMU internal use > - > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h b/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > index a017983ff1fa..5056d3728da8 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > @@ -390,6 +390,7 @@ typedef struct { > uint32_t spare3[14]; > > // SECTION: BOARD PARAMETERS > + struct_group(v4_10, > // Telemetry Settings > uint16_t GfxMaxCurrent; // in Amps > int8_t GfxOffset; // in Amps > @@ -444,7 +445,7 @@ typedef struct { > > //reserved > uint32_t reserved[14]; > - > + ); > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > index 6ec8492f71f5..19951399cb33 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > @@ -463,11 +463,11 @@ static int arcturus_append_powerplay_table(struct smu_context *smu) > smc_dpm_table->table_header.format_revision, > smc_dpm_table->table_header.content_revision); > > + BUILD_BUG_ON(sizeof(smc_pptable->v4_6) != sizeof(smc_dpm_table->dpm_info)); > if ((smc_dpm_table->table_header.format_revision == 4) && > (smc_dpm_table->table_header.content_revision == 6)) > - memcpy(&smc_pptable->MaxVoltageStepGfx, > - &smc_dpm_table->maxvoltagestepgfx, > - sizeof(*smc_dpm_table) - offsetof(struct atom_smc_dpm_info_v4_6, maxvoltagestepgfx)); > + memcpy(&smc_pptable->v4_6, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > > return 0; > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > index 59ea59acfb00..cb6665fbe319 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > @@ -431,16 +431,20 @@ static int navi10_append_powerplay_table(struct smu_context *smu) > > switch (smc_dpm_table->table_header.content_revision) { > case 5: /* nv10 and nv14 */ > - memcpy(smc_pptable->I2cControllers, smc_dpm_table->I2cControllers, > - sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header)); > + BUILD_BUG_ON(sizeof(smc_pptable->v4) != > + sizeof(smc_dpm_table->dpm_info)); > + memcpy(&smc_pptable->v4, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > break; > case 7: /* nv12 */ > ret = amdgpu_atombios_get_data_table(adev, index, NULL, NULL, NULL, > (uint8_t **)&smc_dpm_table_v4_7); > if (ret) > return ret; > - memcpy(smc_pptable->I2cControllers, smc_dpm_table_v4_7->I2cControllers, > - sizeof(*smc_dpm_table_v4_7) - sizeof(smc_dpm_table_v4_7->table_header)); > + BUILD_BUG_ON(sizeof(smc_pptable->v4) != > + sizeof(smc_dpm_table_v4_7->dpm_info)); > + memcpy(&smc_pptable->v4, &smc_dpm_table_v4_7->dpm_info, > + sizeof(smc_dpm_table_v4_7->dpm_info)); > break; > default: > dev_err(smu->adev->dev, "smc_dpm_info with unsupported content revision %d!\n", > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > index 856eeaf293b8..c0645302fa50 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > @@ -407,11 +407,11 @@ static int aldebaran_append_powerplay_table(struct smu_context *smu) > smc_dpm_table->table_header.format_revision, > smc_dpm_table->table_header.content_revision); > > + BUILD_BUG_ON(sizeof(smc_pptable->v4_10) != sizeof(smc_dpm_table->dpm_info)); > if ((smc_dpm_table->table_header.format_revision == 4) && > (smc_dpm_table->table_header.content_revision == 10)) > - memcpy(&smc_pptable->GfxMaxCurrent, > - &smc_dpm_table->GfxMaxCurrent, > - sizeof(*smc_dpm_table) - offsetof(struct atom_smc_dpm_info_v4_10, GfxMaxCurrent)); > + memcpy(&smc_pptable->v4_10, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > return 0; > } > > -- > 2.30.2 >
WARNING: multiple messages have this Message-ID (diff)
From: Alex Deucher <alexdeucher@gmail.com> To: Kees Cook <keescook@chromium.org> Cc: linux-hardening@vger.kernel.org, linux-kbuild@vger.kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-staging@lists.linux.dev, Linux Wireless List <linux-wireless@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>, Maling list - DRI developers <dri-devel@lists.freedesktop.org>, "Gustavo A. R. Silva" <gustavoars@kernel.org>, linux-block@vger.kernel.org, clang-built-linux <clang-built-linux@googlegroups.com>, Keith Packard <keithpac@amazon.com>, Network Development <netdev@vger.kernel.org>, Andrew Morton <akpm@linux-foundation.org> Subject: Re: [PATCH 23/64] drm/amd/pm: Use struct_group() for memcpy() region Date: Thu, 29 Jul 2021 22:07:29 -0400 [thread overview] Message-ID: <CADnq5_Npb8uYvd+R4UHgf-w8-cQj3JoODjviJR_Y9w9wqJ71mQ@mail.gmail.com> (raw) In-Reply-To: <20210727205855.411487-24-keescook@chromium.org> On Tue, Jul 27, 2021 at 5:17 PM Kees Cook <keescook@chromium.org> wrote: > > In preparation for FORTIFY_SOURCE performing compile-time and run-time > field bounds checking for memcpy(), memmove(), and memset(), avoid > intentionally writing across neighboring fields. > > Use struct_group() in structs: > struct atom_smc_dpm_info_v4_5 > struct atom_smc_dpm_info_v4_6 > struct atom_smc_dpm_info_v4_7 > struct atom_smc_dpm_info_v4_10 > PPTable_t > so the grouped members can be referenced together. This will allow > memcpy() and sizeof() to more easily reason about sizes, improve > readability, and avoid future warnings about writing beyond the end of > the first member. > > "pahole" shows no size nor member offset changes to any structs. > "objdump -d" shows no object code changes. These headers represent interfaces with firmware running on microcontrollers, so if the sizes or offsets change that could cause a problem. That doesn't seem to be the case, but something to keep in mind. Patch is: Acked-by: Alex Deucher <alexander.deucher@amd.com> Feel free to take this through whatever tree makes sense. Alex > > Signed-off-by: Kees Cook <keescook@chromium.org> > --- > drivers/gpu/drm/amd/include/atomfirmware.h | 9 ++++++++- > .../gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h | 3 ++- > drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h | 3 ++- > .../gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h | 3 ++- > drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 6 +++--- > drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 12 ++++++++---- > drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 6 +++--- > 7 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h > index 3811e58dd857..694dee9d2691 100644 > --- a/drivers/gpu/drm/amd/include/atomfirmware.h > +++ b/drivers/gpu/drm/amd/include/atomfirmware.h > @@ -2081,6 +2081,7 @@ struct atom_smc_dpm_info_v4_5 > { > struct atom_common_table_header table_header; > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // I2C Control > struct smudpm_i2c_controller_config_v2 I2cControllers[8]; > > @@ -2159,7 +2160,7 @@ struct atom_smc_dpm_info_v4_5 > uint32_t MvddRatio; // This is used for MVDD Vid workaround. It has 16 fractional bits (Q16.16) > > uint32_t BoardReserved[9]; > - > + ); > }; > > struct atom_smc_dpm_info_v4_6 > @@ -2168,6 +2169,7 @@ struct atom_smc_dpm_info_v4_6 > // section: board parameters > uint32_t i2c_padding[3]; // old i2c control are moved to new area > > + struct_group(dpm_info, > uint16_t maxvoltagestepgfx; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. > uint16_t maxvoltagestepsoc; // in mv(q2) max voltage step that smu will request. multiple steps are taken if voltage change exceeds this value. > > @@ -2246,12 +2248,14 @@ struct atom_smc_dpm_info_v4_6 > > // reserved > uint32_t boardreserved[10]; > + ); > }; > > struct atom_smc_dpm_info_v4_7 > { > struct atom_common_table_header table_header; > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // I2C Control > struct smudpm_i2c_controller_config_v2 I2cControllers[8]; > > @@ -2348,6 +2352,7 @@ struct atom_smc_dpm_info_v4_7 > uint8_t Padding8_Psi2; > > uint32_t BoardReserved[5]; > + ); > }; > > struct smudpm_i2c_controller_config_v3 > @@ -2478,6 +2483,7 @@ struct atom_smc_dpm_info_v4_10 > struct atom_common_table_header table_header; > > // SECTION: BOARD PARAMETERS > + struct_group(dpm_info, > // Telemetry Settings > uint16_t GfxMaxCurrent; // in Amps > uint8_t GfxOffset; // in Amps > @@ -2524,6 +2530,7 @@ struct atom_smc_dpm_info_v4_10 > uint16_t spare5; > > uint32_t reserved[16]; > + ); > }; > > /* > diff --git a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > index 43d43d6addc0..8093a98800c3 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_arcturus.h > @@ -643,6 +643,7 @@ typedef struct { > // SECTION: BOARD PARAMETERS > > // SVI2 Board Parameters > + struct_group(v4_6, > uint16_t MaxVoltageStepGfx; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. > uint16_t MaxVoltageStepSoc; // In mV(Q2) Max voltage step that SMU will request. Multiple steps are taken if voltage change exceeds this value. > > @@ -728,10 +729,10 @@ typedef struct { > uint32_t BoardVoltageCoeffB; // decode by /1000 > > uint32_t BoardReserved[7]; > + ); > > // Padding for MMHUB - do not modify this > uint32_t MmHubPadding[8]; // SMU internal use > - > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > index 04752ade1016..0b4e6e907e95 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu11_driver_if_navi10.h > @@ -725,6 +725,7 @@ typedef struct { > uint32_t Reserved[8]; > > // SECTION: BOARD PARAMETERS > + struct_group(v4, > // I2C Control > I2cControllerConfig_t I2cControllers[NUM_I2C_CONTROLLERS]; > > @@ -809,10 +810,10 @@ typedef struct { > uint8_t Padding8_Loadline; > > uint32_t BoardReserved[8]; > + ); > > // Padding for MMHUB - do not modify this > uint32_t MmHubPadding[8]; // SMU internal use > - > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h b/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > index a017983ff1fa..5056d3728da8 100644 > --- a/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > +++ b/drivers/gpu/drm/amd/pm/inc/smu13_driver_if_aldebaran.h > @@ -390,6 +390,7 @@ typedef struct { > uint32_t spare3[14]; > > // SECTION: BOARD PARAMETERS > + struct_group(v4_10, > // Telemetry Settings > uint16_t GfxMaxCurrent; // in Amps > int8_t GfxOffset; // in Amps > @@ -444,7 +445,7 @@ typedef struct { > > //reserved > uint32_t reserved[14]; > - > + ); > } PPTable_t; > > typedef struct { > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > index 6ec8492f71f5..19951399cb33 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c > @@ -463,11 +463,11 @@ static int arcturus_append_powerplay_table(struct smu_context *smu) > smc_dpm_table->table_header.format_revision, > smc_dpm_table->table_header.content_revision); > > + BUILD_BUG_ON(sizeof(smc_pptable->v4_6) != sizeof(smc_dpm_table->dpm_info)); > if ((smc_dpm_table->table_header.format_revision == 4) && > (smc_dpm_table->table_header.content_revision == 6)) > - memcpy(&smc_pptable->MaxVoltageStepGfx, > - &smc_dpm_table->maxvoltagestepgfx, > - sizeof(*smc_dpm_table) - offsetof(struct atom_smc_dpm_info_v4_6, maxvoltagestepgfx)); > + memcpy(&smc_pptable->v4_6, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > > return 0; > } > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > index 59ea59acfb00..cb6665fbe319 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c > @@ -431,16 +431,20 @@ static int navi10_append_powerplay_table(struct smu_context *smu) > > switch (smc_dpm_table->table_header.content_revision) { > case 5: /* nv10 and nv14 */ > - memcpy(smc_pptable->I2cControllers, smc_dpm_table->I2cControllers, > - sizeof(*smc_dpm_table) - sizeof(smc_dpm_table->table_header)); > + BUILD_BUG_ON(sizeof(smc_pptable->v4) != > + sizeof(smc_dpm_table->dpm_info)); > + memcpy(&smc_pptable->v4, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > break; > case 7: /* nv12 */ > ret = amdgpu_atombios_get_data_table(adev, index, NULL, NULL, NULL, > (uint8_t **)&smc_dpm_table_v4_7); > if (ret) > return ret; > - memcpy(smc_pptable->I2cControllers, smc_dpm_table_v4_7->I2cControllers, > - sizeof(*smc_dpm_table_v4_7) - sizeof(smc_dpm_table_v4_7->table_header)); > + BUILD_BUG_ON(sizeof(smc_pptable->v4) != > + sizeof(smc_dpm_table_v4_7->dpm_info)); > + memcpy(&smc_pptable->v4, &smc_dpm_table_v4_7->dpm_info, > + sizeof(smc_dpm_table_v4_7->dpm_info)); > break; > default: > dev_err(smu->adev->dev, "smc_dpm_info with unsupported content revision %d!\n", > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > index 856eeaf293b8..c0645302fa50 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c > @@ -407,11 +407,11 @@ static int aldebaran_append_powerplay_table(struct smu_context *smu) > smc_dpm_table->table_header.format_revision, > smc_dpm_table->table_header.content_revision); > > + BUILD_BUG_ON(sizeof(smc_pptable->v4_10) != sizeof(smc_dpm_table->dpm_info)); > if ((smc_dpm_table->table_header.format_revision == 4) && > (smc_dpm_table->table_header.content_revision == 10)) > - memcpy(&smc_pptable->GfxMaxCurrent, > - &smc_dpm_table->GfxMaxCurrent, > - sizeof(*smc_dpm_table) - offsetof(struct atom_smc_dpm_info_v4_10, GfxMaxCurrent)); > + memcpy(&smc_pptable->v4_10, &smc_dpm_table->dpm_info, > + sizeof(smc_dpm_table->dpm_info)); > return 0; > } > > -- > 2.30.2 >
next prev parent reply other threads:[~2021-07-30 2:07 UTC|newest] Thread overview: 294+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-27 20:57 [PATCH 00/64] Introduce strict memcpy() bounds checking Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-27 20:57 ` [PATCH 01/64] media: omap3isp: Extract struct group for memcpy() region Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 0:55 ` Gustavo A. R. Silva 2021-07-28 0:55 ` Gustavo A. R. Silva 2021-07-28 1:50 ` Kees Cook 2021-07-28 1:50 ` Kees Cook 2021-07-28 8:59 ` David Sterba 2021-07-28 8:59 ` David Sterba 2021-07-28 9:14 ` Dan Carpenter 2021-07-28 21:37 ` Bart Van Assche 2021-07-28 21:37 ` David Sterba 2021-07-28 21:37 ` David Sterba 2021-07-29 5:56 ` Greg Kroah-Hartman 2021-07-29 8:20 ` Dan Carpenter 2021-07-29 8:20 ` Dan Carpenter 2021-07-30 6:00 ` Kees Cook 2021-07-30 6:00 ` Kees Cook 2021-07-30 8:38 ` David Sterba 2021-07-30 8:38 ` David Sterba 2021-07-30 9:00 ` Dan Carpenter 2021-07-30 16:44 ` Kees Cook 2021-07-30 17:08 ` Nick Desaulniers 2021-07-30 19:18 ` Kees Cook 2021-07-27 20:57 ` [PATCH 02/64] mac80211: Use flex-array for radiotap header bitmap Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 7:35 ` Dan Carpenter 2021-07-28 7:35 ` Dan Carpenter 2021-07-28 9:23 ` David Sterba 2021-07-28 9:23 ` David Sterba 2021-07-28 21:54 ` Kees Cook 2021-07-29 10:45 ` David Sterba 2021-07-29 10:45 ` David Sterba 2021-07-30 6:06 ` Kees Cook 2021-07-28 21:20 ` Kees Cook 2021-07-28 21:20 ` Kees Cook 2021-07-28 23:14 ` Kees Cook 2021-07-28 23:14 ` Kees Cook 2021-07-28 23:33 ` Kees Cook 2021-07-28 23:33 ` Kees Cook 2021-07-29 8:25 ` Dan Carpenter 2021-07-29 8:25 ` Dan Carpenter 2021-07-27 20:57 ` [PATCH 03/64] rpmsg: glink: Replace strncpy() with strscpy_pad() Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 2:07 ` Gustavo A. R. Silva 2021-07-28 2:07 ` Gustavo A. R. Silva 2021-07-27 20:57 ` [PATCH 04/64] stddef: Introduce struct_group() helper macro Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 2:32 ` Gustavo A. R. Silva 2021-07-28 2:32 ` Gustavo A. R. Silva 2021-07-28 10:54 ` Rasmus Villemoes 2021-07-28 10:54 ` Rasmus Villemoes 2021-07-28 21:59 ` Kees Cook 2021-07-28 21:59 ` Kees Cook 2021-07-30 22:19 ` Williams, Dan J 2021-07-31 2:59 ` Kees Cook 2021-07-31 5:24 ` Rasmus Villemoes 2021-07-31 15:10 ` Kees Cook 2021-07-27 20:57 ` [PATCH 05/64] skbuff: Switch structure bounds to struct_group() Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 3:50 ` Gustavo A. R. Silva 2021-07-28 3:50 ` Gustavo A. R. Silva 2021-07-27 20:57 ` [PATCH 06/64] bnxt_en: Use struct_group_attr() for memcpy() region Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 1:03 ` Michael Chan 2021-07-28 1:03 ` Michael Chan 2021-07-28 4:45 ` Gustavo A. R. Silva 2021-07-28 4:45 ` Gustavo A. R. Silva 2021-07-27 20:57 ` [PATCH 07/64] staging: rtl8192e: Use struct_group() " Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-27 22:30 ` Larry Finger 2021-07-27 22:30 ` Larry Finger 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-27 20:57 ` [PATCH 08/64] staging: rtl8192u: " Kees Cook 2021-07-27 20:57 ` Kees Cook 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-27 20:58 ` [PATCH 09/64] staging: rtl8723bs: Avoid field-overflowing memcpy() Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:46 ` Greg Kroah-Hartman 2021-07-28 5:46 ` Greg Kroah-Hartman 2021-07-27 20:58 ` [PATCH 10/64] lib80211: Use struct_group() for memcpy() region Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:52 ` Greg Kroah-Hartman 2021-07-28 5:52 ` Greg Kroah-Hartman 2021-08-13 8:04 ` Johannes Berg 2021-08-13 15:49 ` Kees Cook 2021-08-13 19:44 ` Johannes Berg 2021-07-27 20:58 ` [PATCH 11/64] net/mlx5e: Avoid field-overflowing memcpy() Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 12/64] mwl8k: Use struct_group() for memcpy() region Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 13/64] libertas: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 14/64] libertas_tf: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 15/64] ipw2x00: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 18:55 ` Stanislav Yakovlev 2021-07-28 18:55 ` Stanislav Yakovlev 2021-07-27 20:58 ` [PATCH 16/64] thermal: intel: int340x_thermal: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 17/64] iommu/amd: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 18/64] cxgb3: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 19/64] ip: Use struct_group() for memcpy() regions Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:55 ` Greg Kroah-Hartman 2021-07-28 5:55 ` Greg Kroah-Hartman 2021-07-28 6:14 ` Gustavo A. R. Silva 2021-07-28 6:14 ` Gustavo A. R. Silva 2021-07-28 6:19 ` Greg Kroah-Hartman 2021-07-28 6:19 ` Greg Kroah-Hartman 2021-07-28 6:31 ` Gustavo A. R. Silva 2021-07-28 6:31 ` Gustavo A. R. Silva 2021-07-28 6:37 ` Gustavo A. R. Silva 2021-07-28 6:37 ` Gustavo A. R. Silva 2021-07-28 6:41 ` Greg Kroah-Hartman 2021-07-28 6:41 ` Greg Kroah-Hartman 2021-07-28 21:01 ` Kees Cook 2021-07-28 21:01 ` Kees Cook 2021-07-29 1:59 ` Bart Van Assche 2021-07-29 1:59 ` Bart Van Assche 2021-07-27 20:58 ` [PATCH 20/64] intersil: Use struct_group() for memcpy() region Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 21/64] cxgb4: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 22/64] bnx2x: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 23/64] drm/amd/pm: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-30 2:07 ` Alex Deucher [this message] 2021-07-30 2:07 ` Alex Deucher 2021-07-27 20:58 ` [PATCH 24/64] staging: wlan-ng: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-28 5:45 ` Greg Kroah-Hartman 2021-07-27 20:58 ` [PATCH 25/64] drm/mga/mga_ioc32: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:56 ` Greg Kroah-Hartman 2021-07-28 5:56 ` Greg Kroah-Hartman 2021-07-29 12:11 ` Daniel Vetter 2021-07-31 4:20 ` Kees Cook 2021-07-27 20:58 ` [PATCH 26/64] net/mlx5e: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 27/64] HID: cp2112: " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 28/64] compiler_types.h: Remove __compiletime_object_size() Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 29/64] lib/string: Move helper functions out of string.c Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 30/64] fortify: Move remaining fortify helpers into fortify-string.h Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 31/64] fortify: Explicitly disable Clang support Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 21:18 ` Nathan Chancellor 2021-07-27 21:18 ` Nathan Chancellor 2021-07-27 21:47 ` Kees Cook 2021-07-27 21:47 ` Kees Cook 2021-07-27 20:58 ` [PATCH 32/64] fortify: Add compile-time FORTIFY_SOURCE tests Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 33/64] lib: Introduce CONFIG_TEST_MEMCPY Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 23:31 ` Bart Van Assche 2021-07-27 23:31 ` Bart Van Assche 2021-07-27 23:33 ` Randy Dunlap 2021-07-27 23:33 ` Randy Dunlap 2021-07-28 1:30 ` Kees Cook 2021-07-28 1:30 ` Kees Cook 2021-07-27 20:58 ` [PATCH 34/64] fortify: Detect struct member overflows in memcpy() at compile-time Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 22:43 ` Nick Desaulniers 2021-07-27 22:43 ` Nick Desaulniers 2021-07-28 1:47 ` Kees Cook 2021-07-28 1:47 ` Kees Cook 2021-07-28 0:34 ` kernel test robot 2021-07-28 3:24 ` kernel test robot 2021-07-28 11:19 ` Rasmus Villemoes 2021-07-28 11:19 ` Rasmus Villemoes 2021-07-30 2:39 ` Kees Cook 2021-07-30 2:39 ` Kees Cook 2021-07-28 11:44 ` kernel test robot 2021-07-28 15:22 ` kernel test robot 2021-07-28 22:06 ` kernel test robot 2021-07-27 20:58 ` [PATCH 35/64] fortify: Detect struct member overflows in memmove() " Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-08-02 5:08 ` kernel test robot 2021-07-27 20:58 ` [PATCH 36/64] scsi: ibmvscsi: Avoid multi-field memset() overflow by aiming at srp Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 1:39 ` Martin K. Petersen 2021-07-28 1:39 ` Martin K. Petersen 2021-07-28 18:57 ` Kees Cook 2021-07-28 18:57 ` Kees Cook 2021-07-29 3:35 ` Martin K. Petersen 2021-07-29 3:35 ` Martin K. Petersen 2021-07-30 19:11 ` Tyrel Datwyler 2021-07-30 18:16 ` Tyrel Datwyler 2021-07-27 20:58 ` [PATCH 37/64] string.h: Introduce memset_after() for wiping trailing members/padding Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 38/64] xfrm: Use memset_after() to clear padding Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 39/64] mac80211: Use memset_after() to clear tx status Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-31 15:55 ` Kees Cook 2021-08-13 7:40 ` Johannes Berg 2021-08-13 16:08 ` Kees Cook 2021-08-13 18:19 ` Johannes Berg 2021-08-13 7:41 ` Johannes Berg 2021-07-27 20:58 ` [PATCH 40/64] net: 802: Use memset_after() to clear struct fields Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 41/64] net: dccp: Use memset_after() for TP zeroing Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 42/64] net: qede: Use memset_after() for counters Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-31 16:07 ` Kees Cook 2021-07-27 20:58 ` [PATCH 43/64] ath11k: Use memset_after() for clearing queue descriptors Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 44/64] iw_cxgb4: Use memset_after() for cpl_t5_pass_accept_rpl Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 45/64] intel_th: msu: Use memset_after() for clearing hw header Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 46/64] IB/mthca: Use memset_after() for clearing mpt_entry Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 47/64] btrfs: Use memset_after() to clear end of struct Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 9:42 ` David Sterba 2021-07-28 9:42 ` David Sterba 2021-07-28 21:56 ` Kees Cook 2021-07-29 10:33 ` David Sterba 2021-07-29 10:33 ` David Sterba 2021-07-31 15:25 ` Kees Cook 2021-08-09 11:20 ` David Sterba 2021-07-27 20:58 ` [PATCH 48/64] drbd: Use struct_group() to zero algs Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 21:45 ` Bart Van Assche 2021-07-28 21:45 ` Bart Van Assche 2021-07-30 2:31 ` Kees Cook 2021-07-30 2:31 ` Kees Cook 2021-07-30 2:57 ` Bart Van Assche 2021-07-30 2:57 ` Bart Van Assche 2021-07-30 9:25 ` Lars Ellenberg 2021-07-30 9:25 ` Lars Ellenberg 2021-07-30 15:32 ` Nick Desaulniers 2021-07-27 20:58 ` [PATCH 49/64] cm4000_cs: Use struct_group() to zero struct cm4000_dev region Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:48 ` Greg Kroah-Hartman 2021-07-28 5:48 ` Greg Kroah-Hartman 2021-07-27 20:58 ` [PATCH 50/64] KVM: x86: Use struct_group() to zero decode cache Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 51/64] tracing: Use struct_group() to zero struct trace_iterator Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 52/64] dm integrity: Use struct_group() to zero struct journal_sector Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 53/64] HID: roccat: Use struct_group() to zero kone_mouse_event Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 54/64] ipv6: Use struct_group() to zero rt6_info Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-29 18:58 ` Jakub Kicinski 2021-07-29 18:58 ` Jakub Kicinski 2021-07-31 15:01 ` Kees Cook 2021-07-27 20:58 ` [PATCH 55/64] RDMA/mlx5: Use struct_group() to zero struct mlx5_ib_mr Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 56/64] ethtool: stats: Use struct_group() to clear all stats at once Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 57/64] netfilter: conntrack: Use struct_group() to zero struct nf_conn Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 58/64] powerpc: Split memset() to avoid multi-field overflow Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-08-05 11:36 ` Michael Ellerman 2021-07-27 20:58 ` [PATCH 59/64] fortify: Detect struct member overflows in memset() at compile-time Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 2:59 ` kernel test robot 2021-07-28 17:18 ` kernel test robot 2021-07-27 20:58 ` [PATCH 60/64] fortify: Work around Clang inlining bugs Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 61/64] Makefile: Enable -Warray-bounds Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 62/64] netlink: Avoid false-positive memcpy() warning Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-28 5:49 ` Greg Kroah-Hartman 2021-07-28 5:49 ` Greg Kroah-Hartman 2021-07-28 11:24 ` Rasmus Villemoes 2021-07-28 11:24 ` Rasmus Villemoes 2021-07-30 1:39 ` Kees Cook 2021-07-30 1:39 ` Kees Cook 2021-07-30 1:41 ` Kees Cook 2021-07-30 1:41 ` Kees Cook 2021-07-27 20:58 ` [PATCH 63/64] iwlwifi: dbg_ini: Split memcpy() to avoid multi-field write Kees Cook 2021-07-27 20:58 ` Kees Cook 2021-07-27 20:58 ` [PATCH 64/64] fortify: Add run-time WARN for cross-field memcpy() Kees Cook 2021-07-27 20:58 ` Kees Cook
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CADnq5_Npb8uYvd+R4UHgf-w8-cQj3JoODjviJR_Y9w9wqJ71mQ@mail.gmail.com \ --to=alexdeucher@gmail.com \ --cc=akpm@linux-foundation.org \ --cc=clang-built-linux@googlegroups.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=gregkh@linuxfoundation.org \ --cc=gustavoars@kernel.org \ --cc=keescook@chromium.org \ --cc=keithpac@amazon.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-hardening@vger.kernel.org \ --cc=linux-kbuild@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-staging@lists.linux.dev \ --cc=linux-wireless@vger.kernel.org \ --cc=netdev@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.