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;
