Re: [PATCH v3 1/2] cxl/region: Fix use-after-free in find_pos_and_ways() error path

Dave Jiang <[email protected]> Fri, 24 Jul 2026 15:48:19 -0700
Newsgroups org.kernel.vger.linux-cxl
Message-ID <[email protected]>

On 7/24/26 3:28 PM, Alison Schofield wrote:
> The error path releases its reference to a switch decoder before
> logging an error that includes the decoder name. If the released
> reference is the last one, the decoder can be freed before the error
> message accesses its name.
> 
> Drop the reference after the error is reported.
> 
> Fixes: d90acdf49e18 ("cxl/region: Add a dev_err() on missing target list entries")
> Reviewed-by: Li Ming <[email protected]>
> Reviewed-by: Jonathan Cameron <[email protected]>
> Signed-off-by: Alison Schofield <[email protected]>

Series applied to cxl/next
15da704b7323
bad0aa134b64

> ---
> 
> Changes in v3:
> - Log dev_name(dev) instead of dev_name(&cxlsd->cxld.dev) (Jonathan)
> - Remove double space in commit log (Jonathan)
> Changes in v2:
> - No changes in v2
> 
> 
>  drivers/cxl/core/region.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 1e211542b6b6..6d902e1c4161 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -1938,14 +1938,13 @@ static int find_pos_and_ways(struct cxl_port *port, struct range *range,
>  			break;
>  		}
>  	}
> -	put_device(dev);
> -
>  	if (rc)
>  		dev_err(port->uport_dev,
>  			"failed to find %s:%s in target list of %s\n",
>  			dev_name(&port->dev),
> -			dev_name(port->parent_dport->dport_dev),
> -			dev_name(&cxlsd->cxld.dev));
> +			dev_name(port->parent_dport->dport_dev), dev_name(dev));
> +
> +	put_device(dev);
>  
>  	return rc;
>  }
> 
> base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482