On Fri, 27 Feb 2026 22:32:04 +0000
<[email protected]> wrote:

> From: Shiju Jose <[email protected]>
Hi Shiju,

Perhaps a more specific title would help people understand quickly what
type of fix this is?

Something like:
hw/cxl: Fix handling of component ID to not assume it is a string.


> 
> Add following fixes to the commit: hw/cxl: Add support for Maintenance
> command and Post Package Repair (PPR).
That just wants to be a reference to the fixes tag.

> 
> 1. In cxl_create_mem_sparing_event_records(), replace strncpy with memcpy to
> solve coverity warning because full size of the array to use as length in
> strncpy to copy the entire component id data, which is 16 bytes.
I wouldn't necessarily focus on the coverity issue bit of this, but rather that
it's not a string so memcpy is the correct function to use.  Then flag it as
as being identified as a result of the coverity warning.
> 
> 2. In cxl_maintenance_insert(),
>  - replace strncpy with memcpy in to copy full data because component id is
>    16 bytes data.
>  - remove memset which is not required.
> 
> Reported-by: Peter Maydell <[email protected]>

The original patch is upstream, so need a Fixes tag. I can't remember how
we mark coverity issue closures, so look for a similar patch and copy that
style. Maybe just a Closes tag for Peter's email pointing it out.

Code looks good.

> Signed-off-by: Shiju Jose <[email protected]>
> ---
>  hw/cxl/cxl-mailbox-utils.c | 4 ++--
>  hw/mem/cxl_type3.c         | 4 +---
>  2 files changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> index c83b5f90d4..9c99422cd4 100644
> --- a/hw/cxl/cxl-mailbox-utils.c
> +++ b/hw/cxl/cxl-mailbox-utils.c
> @@ -1994,8 +1994,8 @@ static void 
> cxl_create_mem_sparing_event_records(CXLType3Dev *ct3d,
>          stw_le_p(&event_rec.column, ent->column);
>          event_rec.sub_channel = ent->sub_channel;
>          if (ent->validity_flags & CXL_MSER_VALID_COMP_ID) {
> -            strncpy((char *)event_rec.component_id, (char 
> *)ent->component_id,
> -                    sizeof(event_rec.component_id));
> +            memcpy(event_rec.component_id, ent->component_id,
> +                   sizeof(event_rec.component_id));
>          }
>      } else if (sparing_pi) {
>          event_rec.flags = CXL_MSER_FLAGS_QUERY_RESOURCES;
> diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c
> index 4739239da3..3cb1096e16 100644
> --- a/hw/mem/cxl_type3.c
> +++ b/hw/mem/cxl_type3.c
> @@ -1767,7 +1767,6 @@ static void cxl_maintenance_insert(CXLType3Dev *ct3d, 
> uint64_t dpa,
>          }
>      }
>      m = g_new0(CXLMaintenance, 1);
> -    memset(m, 0, sizeof(*m));
>      m->dpa = dpa;
>      m->validity_flags = 0;
>  
> @@ -1804,8 +1803,7 @@ static void cxl_maintenance_insert(CXLType3Dev *ct3d, 
> uint64_t dpa,
>          m->validity_flags |= CXL_MSER_VALID_SUB_CHANNEL;
>      }
>      if (component_id) {
> -        strncpy((char *)m->component_id, component_id,
> -                sizeof(m->component_id) - 1);
> +        memcpy(m->component_id, component_id, sizeof(m->component_id));
>          m->validity_flags |= CXL_MSER_VALID_COMP_ID;
>          if (has_comp_id_pldm && is_comp_id_pldm) {
>              m->validity_flags |= CXL_MSER_VALID_COMP_ID_FORMAT;


Reply via email to