From: Li Ming <ming4.li@intel.com>
To: linux-cxl@vger.kernel.org, rrichter@amd.com,
terry.bowman@amd.com, dan.j.williams@intel.com,
alison.schofield@intel.com, pengfei.xu@intel.com
Cc: Li Ming <ming4.li@intel.com>
Subject: [PATCH v2 0/2] Fix get a wrong pci host bridge in cxl_setup_parent_dport()
Date: Fri, 9 Aug 2024 08:27:48 +0000 [thread overview]
Message-ID: <20240809082750.3015641-1-ming4.li@intel.com> (raw)
The cxl_test unit test environment on qemu always hit 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]
The root cause is that a wrong host bridge was gotten from
dport->dport_dev in cxl_setup_parent_dport(). In
cxl_setup_parent_dport(), it always calls
to_pci_host_bridge(dport->dport_dev) to get a pci_host_bridge structure.
There are two issues in the implementation:
* to_pci_host_bridge(dport->dport_dev) should be used only for RCH
cases, dport->dport_dev points to a pci device rather than a pci host
bridge in VH cases. The solution is checking if dport is in RCH mode
then calling to_pci_host_bridge().
(Patch 1)
* In cxl_test unit test environment, cxl_test will create a emulated CXL
topology with emulated dports, the dport_dev of a emulated dport
points to a platform device. to_pci_host_bridge(dport->dport_dev) also
gets a wrong pci host bridge in the case. The solution is implementing
a new wrap function called __wrap_cxl_setup_parent_dport() on cxl_test
side, the function will filter all emulated dports, make sure only
real dports can be handled by cxl_setup_parent_dport().
(Patch 2)
v1 link: https://lore.kernel.org/linux-cxl/ZrHR+0w3bwM1Ik8h@xpf.sh.intel.com/T/#med6200e54ec12f09fdcc04571516adda261c9561
v2:
- Add call trace log into changelog
- Remove 'dev_is_platform(dport->dport_dev)' checking out of cxl driver
scope. Check if dport is emulated in cxl_test.
Li Ming (2):
cxl/pci: Get AER capability address from RCRB only for RCH dport
cxl/test: Skip cxl_setup_parent_dport() for emulated dports
drivers/cxl/core/pci.c | 10 ++++++----
tools/testing/cxl/Kbuild | 1 +
tools/testing/cxl/test/mock.c | 12 ++++++++++++
3 files changed, 19 insertions(+), 4 deletions(-)
--
2.40.1
next reply other threads:[~2024-08-09 8:58 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-09 8:27 Li Ming [this message]
2024-08-09 8:27 ` [PATCH v2 1/2] cxl/pci: Get AER capability address from RCRB only for RCH dport Li Ming
2024-08-09 8:27 ` [PATCH v2 2/2] cxl/test: Skip cxl_setup_parent_dport() for emulated dports Li Ming
2024-08-10 2:36 ` Pengfei Xu
2024-08-09 21:36 ` [PATCH v2 0/2] Fix get a wrong pci host bridge in cxl_setup_parent_dport() Dan Williams
2024-08-09 21:44 ` Ira Weiny
2024-08-12 6:49 ` Li, Ming4
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=20240809082750.3015641-1-ming4.li@intel.com \
--to=ming4.li@intel.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=pengfei.xu@intel.com \
--cc=rrichter@amd.com \
--cc=terry.bowman@amd.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.