]> git.itanic.dy.fi Git - linux-stable/commitdiff
cxl/pci: Handle excessive CDAT length
authorLukas Wunner <lukas@wunner.de>
Sat, 11 Mar 2023 14:40:04 +0000 (15:40 +0100)
committerDan Williams <dan.j.williams@intel.com>
Mon, 3 Apr 2023 23:16:49 +0000 (16:16 -0700)
If the length in the CDAT header is larger than the concatenation of the
header and all table entries, then the CDAT exposed to user space
contains trailing null bytes.

Not every consumer may be able to handle that.  Per Postel's robustness
principle, "be liberal in what you accept" and silently reduce the
cached length to avoid exposing those null bytes.

Fixes: c97006046c79 ("cxl/port: Read CDAT table")
Tested-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: stable@vger.kernel.org # v6.0+
Link: https://lore.kernel.org/r/6d98b3c7da5343172bd3ccabfabbc1f31c079d74.1678543498.git.lukas@wunner.de
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core/pci.c

index fb600dfbf5a6e975e5eedde6132f9c8950c77eb5..523d5b9fd7fcf2a1fb0b62c85dabac13c63b3c00 100644 (file)
@@ -564,6 +564,9 @@ static int cxl_cdat_read_table(struct device *dev,
                }
        } while (entry_handle != CXL_DOE_TABLE_ACCESS_LAST_ENTRY);
 
+       /* Length in CDAT header may exceed concatenation of CDAT entries */
+       cdat->length -= length;
+
        return 0;
 }