Commit 49d10634 authored by Alison Schofield's avatar Alison Schofield Committed by Dave Jiang
Browse files

cxl/acpi: Restore HBIW check before dereferencing platform_data



Commit 4fe516d2 ("cxl/acpi: Make the XOR calculations available
for testing") split xormap handling code to create a reusable helper
function but inadvertently dropped the check of HBIW values before
dereferencing cxlrd->platform_data. When HBIW is 1 or 3, no xormaps
are needed and platform_data may be NULL, leading to a potential NULL
pointer dereference.

Affects platform configs using XOR Arithmetic with HBIWs of 1 or 3,
when performing DPA->HPA address translation for CXL events. Those
events would be any of poison ops, general media, or dram.

Restore the early return check for HBIW values of 1 and 3 before
dereferencing platform_data.

Fixes: 4fe516d2 ("cxl/acpi: Make the XOR calculations available for testing")
Signed-off-by: default avatarAlison Schofield <alison.schofield@intel.com>
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Link: https://patch.msgid.link/20260109194946.431083-1-alison.schofield@intel.com


Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
parent 3e8aaacd
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -75,9 +75,16 @@ EXPORT_SYMBOL_FOR_MODULES(cxl_do_xormap_calc, "cxl_translate");

static u64 cxl_apply_xor_maps(struct cxl_root_decoder *cxlrd, u64 addr)
{
	struct cxl_cxims_data *cximsd = cxlrd->platform_data;
	int hbiw = cxlrd->cxlsd.nr_targets;
	struct cxl_cxims_data *cximsd;

	/* No xormaps for host bridge interleave ways of 1 or 3 */
	if (hbiw == 1 || hbiw == 3)
		return addr;

	cximsd = cxlrd->platform_data;

	return cxl_do_xormap_calc(cximsd, addr, cxlrd->cxlsd.nr_targets);
	return cxl_do_xormap_calc(cximsd, addr, hbiw);
}

struct cxl_cxims_context {