]> git.baikalelectronics.ru Git - kernel.git/commit
cxl/region: Fix decoder allocation crash
authorVishal Verma <vishal.l.verma@intel.com>
Tue, 1 Nov 2022 07:41:00 +0000 (01:41 -0600)
committerDan Williams <dan.j.williams@intel.com>
Tue, 1 Nov 2022 22:33:07 +0000 (15:33 -0700)
commitc7a8544e6641155e4d7b27afcdd1113b9085fe8d
tree72fcf55fcadc94e4cc88efe8273fc5fd96afce49
parent38b80d093a813f0d51a177ad28414c53e53aa4b8
cxl/region: Fix decoder allocation crash

When an intermediate port's decoders have been exhausted by existing
regions, and creating a new region with the port in question in it's
hierarchical path is attempted, cxl_port_attach_region() fails to find a
port decoder (as would be expected), and drops into the failure / cleanup
path.

However, during cleanup of the region reference, a sanity check attempts
to dereference the decoder, which in the above case didn't exist. This
causes a NULL pointer dereference BUG.

To fix this, refactor the decoder allocation and de-allocation into
helper routines, and in this 'free' routine, check that the decoder,
@cxld, is valid before attempting any operations on it.

Cc: <stable@vger.kernel.org>
Suggested-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Vishal Verma <vishal.l.verma@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Fixes: 3c4e4bb64499 ("cxl/region: Attach endpoint decoders")
Link: https://lore.kernel.org/r/20221101074100.1732003-1-vishal.l.verma@intel.com
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core/region.c