The cxl_test unit test environment on qemu always hits below call trace
with KASAN enabled:
BUG: KASAN: slab-out-of-bounds in cxl_setup_parent_dport+0x480/0x530 [cxl_core]
Read of size 1 at addr ff110000676014f8 by task (udev-worker)/676[ 24.424403] CPU: 2 PID: 676 Comm: (udev-worker) Tainted: G O N 6.10.0-qemucxl #1
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS edk2-20240214-2.el9 02/14/2024
Call Trace:
<TASK>
dump_stack_lvl+0xea/0x150
print_report+0xce/0x610
? kasan_complete_mode_report_info+0x40/0x200
kasan_report+0xcc/0x110
__asan_report_load1_noabort+0x18/0x20
cxl_setup_parent_dport+0x480/0x530 [cxl_core]
cxl_mem_probe+0x49b/0xaa0 [cxl_mem]
cxl_test module models a CXL topology for testing, it creates some
emulated dports with platform devices in the CXL topology, so the
dport_dev of an emulated dport points to a platform device rather than a
pci device or a pci host bridge in the case. Currently,
cxl_setup_parent_dport() is used to set up RAS and AER capability on the
dport connected to the CXL memory device, but cxl_test does not support
RAS or AER functionality yet, so the fix is implementing a
__wrap_cxl_setup_parent_dport() to filter out all emulated dports,
guarantees only real dports can be handled by cxl_setup_parent_dport().
Fixes: f05fd10d13
("cxl/pci: Add RCH downstream port AER register discovery")
Reported-by: Pengfei Xu <pengfei.xu@intel.com>
Closes: https://lore.kernel.org/linux-cxl/ZrHTBp2O+HtUe6kt@xpf.sh.intel.com/T/#t
Signed-off-by: Li Ming <ming4.li@intel.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Alison Schofield <alison.schofield@intel.com>
Tested-by: Ira Weiny <ira.weiny@intel.com>
Tested-by: Alison Schofield <alison.schofield@intel.com>
Link: https://patch.msgid.link/20240809082750.3015641-3-ming4.li@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
72 lines
2.1 KiB
Makefile
72 lines
2.1 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
ldflags-y += --wrap=acpi_table_parse_cedt
|
|
ldflags-y += --wrap=is_acpi_device_node
|
|
ldflags-y += --wrap=acpi_evaluate_integer
|
|
ldflags-y += --wrap=acpi_pci_find_root
|
|
ldflags-y += --wrap=nvdimm_bus_register
|
|
ldflags-y += --wrap=devm_cxl_port_enumerate_dports
|
|
ldflags-y += --wrap=devm_cxl_setup_hdm
|
|
ldflags-y += --wrap=devm_cxl_add_passthrough_decoder
|
|
ldflags-y += --wrap=devm_cxl_enumerate_decoders
|
|
ldflags-y += --wrap=cxl_await_media_ready
|
|
ldflags-y += --wrap=cxl_hdm_decode_init
|
|
ldflags-y += --wrap=cxl_dvsec_rr_decode
|
|
ldflags-y += --wrap=devm_cxl_add_rch_dport
|
|
ldflags-y += --wrap=cxl_rcd_component_reg_phys
|
|
ldflags-y += --wrap=cxl_endpoint_parse_cdat
|
|
ldflags-y += --wrap=cxl_setup_parent_dport
|
|
|
|
DRIVERS := ../../../drivers
|
|
CXL_SRC := $(DRIVERS)/cxl
|
|
CXL_CORE_SRC := $(DRIVERS)/cxl/core
|
|
ccflags-y := -I$(srctree)/drivers/cxl/
|
|
ccflags-y += -D__mock=__weak
|
|
ccflags-y += -DTRACE_INCLUDE_PATH=$(CXL_CORE_SRC) -I$(srctree)/drivers/cxl/core/
|
|
|
|
obj-m += cxl_acpi.o
|
|
|
|
cxl_acpi-y := $(CXL_SRC)/acpi.o
|
|
cxl_acpi-y += mock_acpi.o
|
|
cxl_acpi-y += config_check.o
|
|
cxl_acpi-y += cxl_acpi_test.o
|
|
|
|
obj-m += cxl_pmem.o
|
|
|
|
cxl_pmem-y := $(CXL_SRC)/pmem.o
|
|
cxl_pmem-y += $(CXL_SRC)/security.o
|
|
cxl_pmem-y += config_check.o
|
|
cxl_pmem-y += cxl_pmem_test.o
|
|
|
|
obj-m += cxl_port.o
|
|
|
|
cxl_port-y := $(CXL_SRC)/port.o
|
|
cxl_port-y += config_check.o
|
|
cxl_port-y += cxl_port_test.o
|
|
|
|
|
|
obj-m += cxl_mem.o
|
|
|
|
cxl_mem-y := $(CXL_SRC)/mem.o
|
|
cxl_mem-y += config_check.o
|
|
cxl_mem-y += cxl_mem_test.o
|
|
|
|
obj-m += cxl_core.o
|
|
|
|
cxl_core-y := $(CXL_CORE_SRC)/port.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/pmem.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/regs.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/memdev.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/mbox.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/pci.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/hdm.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/pmu.o
|
|
cxl_core-y += $(CXL_CORE_SRC)/cdat.o
|
|
cxl_core-$(CONFIG_TRACING) += $(CXL_CORE_SRC)/trace.o
|
|
cxl_core-$(CONFIG_CXL_REGION) += $(CXL_CORE_SRC)/region.o
|
|
cxl_core-y += config_check.o
|
|
cxl_core-y += cxl_core_test.o
|
|
cxl_core-y += cxl_core_exports.o
|
|
|
|
KBUILD_CFLAGS := $(filter-out -Wmissing-prototypes -Wmissing-declarations, $(KBUILD_CFLAGS))
|
|
|
|
obj-m += test/
|