From: Shiju Jose <[email protected]> Add following fixes to the commit: hw/cxl: Add support for Maintenance command and Post Package Repair (PPR).
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. 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]> 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; -- 2.43.0
