[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 04/12] cxl/cdat: Fix header sum value in CDAT checksum
From: |
Jonathan Cameron |
Subject: |
[PATCH v2 04/12] cxl/cdat: Fix header sum value in CDAT checksum |
Date: |
Fri, 26 Jan 2024 12:01:24 +0000 |
From: Ira Weiny <ira.weiny@intel.com>
The addition of the DCD support for CXL type-3 devices extended the CDAT
table large enough that the checksum being returned was incorrect.[1]
This was because the checksum value was using the header length field
rather than each of the 4 bytes of the length field. This was
previously not seen because the length of the CDAT data was less than
256 thus resulting in an equivalent checksum value.
Properly calculate the checksum for the CDAT header.
[1]
https://lore.kernel.org/all/20231116-fix-cdat-devm-free-v1-1-b148b40707d7@intel.com/
Fixes: aba578bdace5 ("hw/cxl/cdat: CXL CDAT Data Object Exchange
implementation")
Cc: Huai-Cheng Kuo <hchkuo@avery-design.com.tw>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Fan Ni <fan.ni@samsung.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
Ammended buf naming to hdr_buf to avoid shadow issue with an existing buf
variable
with more limited scope.
---
hw/cxl/cxl-cdat.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/hw/cxl/cxl-cdat.c b/hw/cxl/cxl-cdat.c
index 24829cf242..2fea975671 100644
--- a/hw/cxl/cxl-cdat.c
+++ b/hw/cxl/cxl-cdat.c
@@ -49,6 +49,7 @@ static void ct3_build_cdat(CDATObject *cdat, Error **errp)
g_autofree CDATTableHeader *cdat_header = NULL;
g_autofree CDATEntry *cdat_st = NULL;
uint8_t sum = 0;
+ uint8_t *hdr_buf;
int ent, i;
/* Use default table if fopen == NULL */
@@ -95,8 +96,12 @@ static void ct3_build_cdat(CDATObject *cdat, Error **errp)
/* For now, no runtime updates */
cdat_header->sequence = 0;
cdat_header->length += sizeof(CDATTableHeader);
- sum += cdat_header->revision + cdat_header->sequence +
- cdat_header->length;
+
+ hdr_buf = (uint8_t *)cdat_header;
+ for (i = 0; i < sizeof(*cdat_header); i++) {
+ sum += hdr_buf[i];
+ }
+
/* Sum of all bytes including checksum must be 0 */
cdat_header->checksum = ~sum + 1;
--
2.39.2
- [PATCH v2 00/12 qemu] CXL emulation fixes and minor cleanup., Jonathan Cameron, 2024/01/26
- [PATCH v2 01/12] cxl/cdat: Handle cdat table build errors, Jonathan Cameron, 2024/01/26
- [PATCH v2 03/12] hw/pci-bridge/cxl_upstream: Drop g_malloc() failure handling, Jonathan Cameron, 2024/01/26
- [PATCH v2 02/12] hw/mem/cxl_type3: Drop handling of failure of g_malloc0() and g_malloc(), Jonathan Cameron, 2024/01/26
- [PATCH v2 04/12] cxl/cdat: Fix header sum value in CDAT checksum,
Jonathan Cameron <=
- [PATCH v2 05/12] hw/cxl/mbox: Remove dead code, Jonathan Cameron, 2024/01/26
- [PATCH v2 06/12] hw/cxl/device: read from register values in mdev_reg_read(), Jonathan Cameron, 2024/01/26
- [PATCH v2 07/12] hw/cxl: Pass CXLComponentState to cache_mem_ops, Jonathan Cameron, 2024/01/26
- [PATCH v2 08/12] hw/cxl: Pass NULL for a NULL MemoryRegionOps, Jonathan Cameron, 2024/01/26
- [PATCH v2 09/12] hw/mem/cxl_type3: Fix potential divide by zero reported by coverity, Jonathan Cameron, 2024/01/26
- [PATCH v2 10/12] tests/acpi: Allow update of DSDT.cxl, Jonathan Cameron, 2024/01/26
- [PATCH v2 11/12] hw/i386: Fix _STA return value for ACPI0017, Jonathan Cameron, 2024/01/26
- [PATCH v2 12/12] tests/acpi: Update DSDT.cxl to reflect change _STA return value., Jonathan Cameron, 2024/01/26