]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cxl/pci: Check memdev driver binding status in cxl_reset_done()
authorLi Ming <ming.li@zohomail.com>
Sat, 14 Mar 2026 07:06:33 +0000 (15:06 +0800)
committerDave Jiang <dave.jiang@intel.com>
Tue, 17 Mar 2026 14:54:15 +0000 (07:54 -0700)
cxl_reset_done() accesses the endpoint of the corresponding CXL memdev
without endpoint validity checking. By default, cxlmd->endpoint is
initialized to -ENXIO, if cxl_reset_done() is triggered after the
corresponding CXL memdev probing failed, this results in access to an
invalid endpoint.

CXL subsystem can always check CXL memdev driver binding status to
confirm its endpoint validity. So adding the CXL memdev driver checking
inside cxl_reset_done() to avoid accessing an invalid endpoint.

Fixes: 934edcd436dc ("cxl: Add post-reset warning if reset results in loss of previously committed HDM decoders")
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Li Ming <ming.li@zohomail.com>
Link: https://patch.msgid.link/20260314-fix_access_endpoint_without_drv_check-v2-4-4c09edf2e1db@zohomail.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/pci.c

index fbb300a018302134cd044f9a799173d1d4d819ad..a5922116db2a8f3e25894c9b605ea22fd3ccca42 100644 (file)
@@ -1043,6 +1043,9 @@ static void cxl_reset_done(struct pci_dev *pdev)
         * that no longer exists.
         */
        guard(device)(&cxlmd->dev);
+       if (!cxlmd->dev.driver)
+               return;
+
        if (cxlmd->endpoint &&
            cxl_endpoint_decoder_reset_detected(cxlmd->endpoint)) {
                dev_crit(dev, "SBR happened without memory regions removal.\n");