All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cxl/region: Guard against a missing peer mapping
@ 2026-08-21 22:25 Alison Schofield
  2026-08-25  3:25 ` Richard Cheng
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alison Schofield @ 2026-08-21 22:25 UTC (permalink / raw)
  To: Davidlohr Bueso, Jonathan Cameron, Dave Jiang, Alison Schofield,
	Vishal Verma, Ira Weiny, Li Ming
  Cc: linux-cxl, sashiko-bot

When two endpoints share a dport, both must be mapped by the port.

sashiko-bot reports that a missing peer mapping could result in a NULL
pointer dereference during region creation.

No caller can reach this today. Guard it anyway so a future violation
of the mapping requirement fails region creation rather than causing
an oops.

Reported-by: sashiko-bot@kernel.org
Link: https://sashiko.dev/#/patchset/cover.1787255388.git.alison.schofield%40intel.com?part=3
Assisted-by: Claude:claude-opus-5
Signed-off-by: Alison Schofield <alison.schofield@intel.com>
---
 drivers/cxl/core/region.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
index 27e63e6dab7c..75b8092e6dc2 100644
--- a/drivers/cxl/core/region.c
+++ b/drivers/cxl/core/region.c
@@ -1367,7 +1367,8 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
 	/*
 	 * If this position wants to share a dport with the last endpoint mapped
 	 * then that endpoint, at index 'position - distance', must also be
-	 * mapped by this dport.
+	 * mapped by this dport. An endpoint that this port does not map at all
+	 * fails that requirement.
 	 */
 	if (pos < distance) {
 		dev_dbg(&cxlr->dev, "%s:%s: cannot host %s:%s at %d\n",
@@ -1378,7 +1379,7 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
 	cxled_peer = p->targets[pos - distance];
 	cxlmd_peer = cxled_to_memdev(cxled_peer);
 	ep_peer = cxl_ep_load(port, cxlmd_peer);
-	if (ep->dport != ep_peer->dport) {
+	if (!ep_peer || ep->dport != ep_peer->dport) {
 		dev_dbg(&cxlr->dev,
 			"%s:%s: %s:%s pos %d mismatched peer %s:%s\n",
 			dev_name(port->uport_dev), dev_name(&port->dev),

base-commit: 7098e9cd98a05c0c5de2fae0c2465f9d966fdd07
-- 
2.37.3


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

* Re: [PATCH] cxl/region: Guard against a missing peer mapping
  2026-08-21 22:25 [PATCH] cxl/region: Guard against a missing peer mapping Alison Schofield
@ 2026-08-25  3:25 ` Richard Cheng
  2026-08-25 15:33 ` Dave Jiang
  2026-09-01 17:46 ` Dave Jiang
  2 siblings, 0 replies; 4+ messages in thread
From: Richard Cheng @ 2026-08-25  3:25 UTC (permalink / raw)
  To: Alison Schofield
  Cc: Davidlohr Bueso, Jonathan Cameron, Dave Jiang, Vishal Verma,
	Ira Weiny, Li Ming, linux-cxl, sashiko-bot

On Fri, Aug 21, 2026 at 03:25:14PM +0800, Alison Schofield wrote:
> When two endpoints share a dport, both must be mapped by the port.
> 
> sashiko-bot reports that a missing peer mapping could result in a NULL
> pointer dereference during region creation.
> 
> No caller can reach this today. Guard it anyway so a future violation
> of the mapping requirement fails region creation rather than causing
> an oops.
> 
> Reported-by: sashiko-bot@kernel.org
> Link: https://sashiko.dev/#/patchset/cover.1787255388.git.alison.schofield%40intel.com?part=3
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: Alison Schofield <alison.schofield@intel.com>
> ---
>  drivers/cxl/core/region.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 27e63e6dab7c..75b8092e6dc2 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -1367,7 +1367,8 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	/*
>  	 * If this position wants to share a dport with the last endpoint mapped
>  	 * then that endpoint, at index 'position - distance', must also be
> -	 * mapped by this dport.
> +	 * mapped by this dport. An endpoint that this port does not map at all
> +	 * fails that requirement.
>  	 */
>  	if (pos < distance) {
>  		dev_dbg(&cxlr->dev, "%s:%s: cannot host %s:%s at %d\n",
> @@ -1378,7 +1379,7 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	cxled_peer = p->targets[pos - distance];
>  	cxlmd_peer = cxled_to_memdev(cxled_peer);
>  	ep_peer = cxl_ep_load(port, cxlmd_peer);
> -	if (ep->dport != ep_peer->dport) {
> +	if (!ep_peer || ep->dport != ep_peer->dport) {
>  		dev_dbg(&cxlr->dev,
>  			"%s:%s: %s:%s pos %d mismatched peer %s:%s\n",
>  			dev_name(port->uport_dev), dev_name(&port->dev),
> 
> base-commit: 7098e9cd98a05c0c5de2fae0c2465f9d966fdd07
> -- 
> 2.37.3
> 
>

LGTM.

Reviewed-by: Richard Cheng <icheng@nvidia.com>

Best regards,
Richard Cheng. 

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

* Re: [PATCH] cxl/region: Guard against a missing peer mapping
  2026-08-21 22:25 [PATCH] cxl/region: Guard against a missing peer mapping Alison Schofield
  2026-08-25  3:25 ` Richard Cheng
@ 2026-08-25 15:33 ` Dave Jiang
  2026-09-01 17:46 ` Dave Jiang
  2 siblings, 0 replies; 4+ messages in thread
From: Dave Jiang @ 2026-08-25 15:33 UTC (permalink / raw)
  To: Alison Schofield, Davidlohr Bueso, Jonathan Cameron, Vishal Verma,
	Ira Weiny, Li Ming
  Cc: linux-cxl, sashiko-bot



On 8/21/26 3:25 PM, Alison Schofield wrote:
> When two endpoints share a dport, both must be mapped by the port.
> 
> sashiko-bot reports that a missing peer mapping could result in a NULL
> pointer dereference during region creation.
> 
> No caller can reach this today. Guard it anyway so a future violation
> of the mapping requirement fails region creation rather than causing
> an oops.
> 
> Reported-by: sashiko-bot@kernel.org
> Link: https://sashiko.dev/#/patchset/cover.1787255388.git.alison.schofield%40intel.com?part=3
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: Alison Schofield <alison.schofield@intel.com>

Reviewed-by: Dave Jiang <dave.jiang@intel.com>

> ---
>  drivers/cxl/core/region.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 27e63e6dab7c..75b8092e6dc2 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -1367,7 +1367,8 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	/*
>  	 * If this position wants to share a dport with the last endpoint mapped
>  	 * then that endpoint, at index 'position - distance', must also be
> -	 * mapped by this dport.
> +	 * mapped by this dport. An endpoint that this port does not map at all
> +	 * fails that requirement.
>  	 */
>  	if (pos < distance) {
>  		dev_dbg(&cxlr->dev, "%s:%s: cannot host %s:%s at %d\n",
> @@ -1378,7 +1379,7 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	cxled_peer = p->targets[pos - distance];
>  	cxlmd_peer = cxled_to_memdev(cxled_peer);
>  	ep_peer = cxl_ep_load(port, cxlmd_peer);
> -	if (ep->dport != ep_peer->dport) {
> +	if (!ep_peer || ep->dport != ep_peer->dport) {
>  		dev_dbg(&cxlr->dev,
>  			"%s:%s: %s:%s pos %d mismatched peer %s:%s\n",
>  			dev_name(port->uport_dev), dev_name(&port->dev),
> 
> base-commit: 7098e9cd98a05c0c5de2fae0c2465f9d966fdd07


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

* Re: [PATCH] cxl/region: Guard against a missing peer mapping
  2026-08-21 22:25 [PATCH] cxl/region: Guard against a missing peer mapping Alison Schofield
  2026-08-25  3:25 ` Richard Cheng
  2026-08-25 15:33 ` Dave Jiang
@ 2026-09-01 17:46 ` Dave Jiang
  2 siblings, 0 replies; 4+ messages in thread
From: Dave Jiang @ 2026-09-01 17:46 UTC (permalink / raw)
  To: Alison Schofield, Davidlohr Bueso, Jonathan Cameron, Vishal Verma,
	Ira Weiny, Li Ming
  Cc: linux-cxl, sashiko-bot



On 8/21/26 3:25 PM, Alison Schofield wrote:
> When two endpoints share a dport, both must be mapped by the port.
> 
> sashiko-bot reports that a missing peer mapping could result in a NULL
> pointer dereference during region creation.
> 
> No caller can reach this today. Guard it anyway so a future violation
> of the mapping requirement fails region creation rather than causing
> an oops.
> 
> Reported-by: sashiko-bot@kernel.org
> Link: https://sashiko.dev/#/patchset/cover.1787255388.git.alison.schofield%40intel.com?part=3
> Assisted-by: Claude:claude-opus-5
> Signed-off-by: Alison Schofield <alison.schofield@intel.com>

Applied to cxl/next
b212e37113f8

> ---
>  drivers/cxl/core/region.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> index 27e63e6dab7c..75b8092e6dc2 100644
> --- a/drivers/cxl/core/region.c
> +++ b/drivers/cxl/core/region.c
> @@ -1367,7 +1367,8 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	/*
>  	 * If this position wants to share a dport with the last endpoint mapped
>  	 * then that endpoint, at index 'position - distance', must also be
> -	 * mapped by this dport.
> +	 * mapped by this dport. An endpoint that this port does not map at all
> +	 * fails that requirement.
>  	 */
>  	if (pos < distance) {
>  		dev_dbg(&cxlr->dev, "%s:%s: cannot host %s:%s at %d\n",
> @@ -1378,7 +1379,7 @@ static int check_last_peer(struct cxl_endpoint_decoder *cxled,
>  	cxled_peer = p->targets[pos - distance];
>  	cxlmd_peer = cxled_to_memdev(cxled_peer);
>  	ep_peer = cxl_ep_load(port, cxlmd_peer);
> -	if (ep->dport != ep_peer->dport) {
> +	if (!ep_peer || ep->dport != ep_peer->dport) {
>  		dev_dbg(&cxlr->dev,
>  			"%s:%s: %s:%s pos %d mismatched peer %s:%s\n",
>  			dev_name(port->uport_dev), dev_name(&port->dev),
> 
> base-commit: 7098e9cd98a05c0c5de2fae0c2465f9d966fdd07


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

end of thread, other threads:[~2026-09-01 17:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-21 22:25 [PATCH] cxl/region: Guard against a missing peer mapping Alison Schofield
2026-08-25  3:25 ` Richard Cheng
2026-08-25 15:33 ` Dave Jiang
2026-09-01 17:46 ` Dave Jiang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.