All of lore.kernel.org
 help / color / mirror / Atom feed
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


             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.