From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: <qemu-devel@nongnu.org>, <linux-cxl@vger.kernel.org>,
Fan Ni <fan.ni@samsung.com>, Michael Tsirkin <mst@redhat.com>
Cc: "Ira Weiny" <ira.weiny@intel.com>,
"Dave Jiang" <dave.jiang@intel.com>,
peter.maydell@linaro.org, "Davidlohr Bueso" <dave@stgolabs.net>,
"Hyeonggon Yoo" <42.hyeyoo@gmail.com>,
"Li Zhijian" <lizhijian@fujitsu.com>,
"Stefan Hajnoczi" <stefanha@gmail.com>,
linuxarm@huawei.com, "Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PATCH v2 04/12] cxl/cdat: Fix header sum value in CDAT checksum
Date: Fri, 26 Jan 2024 12:01:24 +0000 [thread overview]
Message-ID: <20240126120132.24248-5-Jonathan.Cameron@huawei.com> (raw)
In-Reply-To: <20240126120132.24248-1-Jonathan.Cameron@huawei.com>
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
next prev parent reply other threads:[~2024-01-26 12:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-26 12:01 [PATCH v2 00/12 qemu] CXL emulation fixes and minor cleanup Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 01/12] cxl/cdat: Handle cdat table build errors Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 02/12] hw/mem/cxl_type3: Drop handling of failure of g_malloc0() and g_malloc() Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 03/12] hw/pci-bridge/cxl_upstream: Drop g_malloc() failure handling Jonathan Cameron
2024-01-26 12:01 ` Jonathan Cameron [this message]
2024-01-26 12:01 ` [PATCH v2 05/12] hw/cxl/mbox: Remove dead code Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 06/12] hw/cxl/device: read from register values in mdev_reg_read() Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 07/12] hw/cxl: Pass CXLComponentState to cache_mem_ops Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 08/12] hw/cxl: Pass NULL for a NULL MemoryRegionOps Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 09/12] hw/mem/cxl_type3: Fix potential divide by zero reported by coverity Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 10/12] tests/acpi: Allow update of DSDT.cxl Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 11/12] hw/i386: Fix _STA return value for ACPI0017 Jonathan Cameron
2024-01-26 12:01 ` [PATCH v2 12/12] tests/acpi: Update DSDT.cxl to reflect change _STA return value Jonathan Cameron
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=20240126120132.24248-5-Jonathan.Cameron@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=42.hyeyoo@gmail.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=fan.ni@samsung.com \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=lizhijian@fujitsu.com \
--cc=mst@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox