public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/7] cxl: Consolidate cxlmd->endpoint accessing
@ 2026-03-10 15:57 Li Ming
  2026-03-10 15:57 ` [PATCH 1/7] driver core: Add conditional guard support for device_lock() Li Ming
                   ` (8 more replies)
  0 siblings, 9 replies; 40+ messages in thread
From: Li Ming @ 2026-03-10 15:57 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
	Davidlohr Bueso, Jonathan Cameron, Dave Jiang, Alison Schofield,
	Vishal Verma, Ira Weiny, Dan Williams, Bjorn Helgaas,
	Ben Cheatham
  Cc: driver-core, linux-kernel, linux-cxl, Jonathan Cameron, Li Ming

Currently, CXL subsystem implementation has some functions that may
access CXL memdev's endpoint before the endpoint initialization
completed or without checking the CXL memdev endpoint validity. 
This patchset fixes three scenarios as above description.

1. cxl_dpa_to_region() is possible to access an invalid CXL memdev
   endpoint.
   there are two scenarios that can trigger this issue:
   a. memdev poison injection/clearing debugfs interfaces:
      devm_cxl_add_endpoint() is used to register CXL memdev endpoint
      and update cxlmd->endpoint from -ENXIO to the endpoint structure.
      memdev poison injection/clearing debugfs interfaces are registered
      before devm_cxl_add_endpoint() is invoked in cxl_mem_probe().
      There is a small window where user can use the debugfs interfaces
      to access an invalid endpoint.
   b. cxl_event_config() in the end of cxl_pci_probe():
      cxl_event_config() invokes cxl_mem_get_event_record() to get
      remain event logs from CXL device during cxl_pci_probe(). If CXL
      memdev probing failed before that, it is also possible to access
      an invalid endpoint.
   To fix these two cases, cxl_dpa_to_region() requires callers holding
   CXL memdev lock to access it and check if CXL memdev driver bingding
   status. Holding CXL memdev lock ensures that CXL memdev probing has
   completed, and if CXL memdev driver is bound, it will mean
   cxlmd->endpoint is valid. (PATCH #1-#5)

2. cxl_reset_done() callback in cxl_pci module.
   cxl_reset_done() callback also accesses cxlmd->endpoint without any
   checking. If CXL memdev probing fails, then cxl_reset_done() is
   called by PCI subsystem, it will access an invalid endpoint. The
   solution is adding a CXL memdev driver binding status inside
   cxl_reset_done(). (PATCH #6)

Besides, the patchset also includes a fix for cxlmd->endpoint reset,
cxlmd->endpoint is set to -ENXIO by default during cxlmd allocation. It
will be updated when endpoint is allocated and added to the bus.
However, the CXL driver does not reset it to -ENXIO when the endpoint is
released. (PATCH #7)

---
Li Ming (7):
      driver core: Add conditional guard support for device_lock()
      cxl/memdev: Hold memdev lock during memdev poison injection/clear
      cxl/region: Hold memdev lock during region poison injection/clear
      cxl/pci: Hold memdev lock in cxl_event_trace_record()
      cxl/region: Ensure endpoint is valid in cxl_dpa_to_region()
      cxl/pci: Check memdev driver binding status in cxl_reset_done()
      cxl/port: Reset cxlmd->endpoint to -ENXIO by default

 drivers/cxl/core/core.h   |   4 +-
 drivers/cxl/core/mbox.c   |   5 ++-
 drivers/cxl/core/memdev.c |  10 +++++
 drivers/cxl/core/port.c   |  14 ++++--
 drivers/cxl/core/region.c | 112 ++++++++++++++++++++++++++++++++++------------
 drivers/cxl/cxlmem.h      |   2 +-
 drivers/cxl/pci.c         |   3 ++
 include/linux/device.h    |   1 +
 8 files changed, 114 insertions(+), 37 deletions(-)
---
base-commit: 11439c4635edd669ae435eec308f4ab8a0804808
change-id: 20260308-fix_access_endpoint_without_drv_check-f2e6ff4bdc48

Best regards,
-- 
Li Ming <ming.li@zohomail.com>


^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2026-03-17  2:10 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-10 15:57 [PATCH 0/7] cxl: Consolidate cxlmd->endpoint accessing Li Ming
2026-03-10 15:57 ` [PATCH 1/7] driver core: Add conditional guard support for device_lock() Li Ming
2026-03-10 17:45   ` Dave Jiang
2026-03-10 18:06     ` Danilo Krummrich
2026-03-10 18:09       ` Dave Jiang
2026-03-10 18:39         ` Dan Williams
2026-03-10 19:17           ` Danilo Krummrich
2026-03-10 20:37             ` Dan Williams
2026-03-10 20:41               ` Danilo Krummrich
2026-03-12 14:35   ` Greg Kroah-Hartman
2026-03-14 15:14   ` Danilo Krummrich
2026-03-10 15:57 ` [PATCH 2/7] cxl/memdev: Hold memdev lock during memdev poison injection/clear Li Ming
2026-03-10 17:53   ` Dave Jiang
2026-03-10 19:29   ` Alison Schofield
2026-03-10 21:34   ` Alison Schofield
2026-03-11 10:53     ` Li Ming
2026-03-12  4:05       ` Alison Schofield
2026-03-12 10:45         ` Li Ming
2026-03-10 15:57 ` [PATCH 3/7] cxl/region: Hold memdev lock during region " Li Ming
2026-03-10 19:54   ` Dan Williams
2026-03-10 21:57   ` Alison Schofield
2026-03-11 11:10     ` Li Ming
2026-03-17  2:10       ` Dan Williams
2026-03-10 15:57 ` [PATCH 4/7] cxl/pci: Hold memdev lock in cxl_event_trace_record() Li Ming
2026-03-10 19:33   ` Dan Williams
2026-03-11 11:11     ` Li Ming
2026-03-10 20:52   ` Dave Jiang
2026-03-11 11:12     ` Li Ming
2026-03-10 15:57 ` [PATCH 5/7] cxl/region: Ensure endpoint is valid in cxl_dpa_to_region() Li Ming
2026-03-10 20:53   ` Dave Jiang
2026-03-10 15:57 ` [PATCH 6/7] cxl/pci: Check memdev driver binding status in cxl_reset_done() Li Ming
2026-03-10 19:31   ` Dan Williams
2026-03-10 20:50   ` Dave Jiang
2026-03-10 15:57 ` [PATCH 7/7] cxl/port: Reset cxlmd->endpoint to -ENXIO by default Li Ming
2026-03-10 19:29   ` Dan Williams
2026-03-11 12:14     ` Li Ming
2026-03-10 19:20 ` [PATCH 0/7] cxl: Consolidate cxlmd->endpoint accessing Alison Schofield
2026-03-11 10:41   ` Li Ming
2026-03-10 20:33 ` Dan Williams
2026-03-11 10:44   ` Li Ming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox