Re: [PATCH] cxl/region: Reject delete of a provider-locked region

Richard Cheng <[email protected]>
Newsgroups org.kernel.vger.linux-cxl,dev.linux.lists.sashiko-reviews
Message-ID <al875ItHwiz7ZFeM@MWDK4CY14F>
On Tue, Jul 21, 2026 at 06:04:02AM +0800, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> 
> New issues:
> - [High] A Time-Of-Check to Time-Of-Use (TOCTOU) race condition in `delete_region_store()` allows userspace to bypass the `CXL_REGION_F_LOCK` protection, leading to orphaned hardware decoders.
> 
> Pre-existing issues:
> - [High] Userspace can bypass `CXL_REGION_F_LOCK` restrictions and tear down region software state by manually detaching targets via `targetN` sysfs attributes, leading to orphaned hardware decoders.
> --
> 
> --- Patch [1]: [PATCH] cxl/region: Reject delete of a provider-locked region ---
> commit 447746e2d3844401b6bdd5604c498e319f1e7719
> Author: Richard Cheng <[email protected]>
> 
> cxl/region: Reject delete of a provider-locked region
>     
> delete_region_store() destroys a region object without checking
> CXL_REGION_F_LOCK, unlike commit_store() which refuses locked regions
> with -EPERM. This patch gates delete_region_store() on CXL_REGION_F_LOCK.
> 
> > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c
> > index 578622240401d..cfc9622c93095 100644
> > --- a/drivers/cxl/core/region.c
> > +++ b/drivers/cxl/core/region.c
> > @@ -2894,6 +2894,9 @@ static ssize_t delete_region_store(struct device *dev,
> >  	if (!cxlr || !sysfs_streq(buf, dev_name(&cxlr->dev)))
> >  		return -ENODEV;
> >  
> > +	if (test_bit(CXL_REGION_F_LOCK, &cxlr->flags))
> > +		return -EPERM;
> > +
> 
> [Severity: High]
> Is there a Time-Of-Check to Time-Of-Use (TOCTOU) race condition here?
> 
> The CXL_REGION_F_LOCK check is performed without holding synchronization
> like the region rwsem, leaving a window open before unregister_region()
> completes.
> 
> If userspace writes to delete_region while concurrently writing to targetN
> to attach a target, delete_region_store() could check the lock flag before
> it is set.
> 
> Then unregister_region() calling device_del() can block in kernfs_drain
> until the concurrent target attachment finishes and sets CXL_REGION_F_LOCK.
> 
> Once resumed, the software region would be destroyed with the lock flag
> set, skipping the hardware reset. Could this sequence recreate the exact
> orphaned hardware decoder state this patch intended to prevent?
>

I'd push back on this.

I think check-then-act observation is fair, but it doesn't affect the patch's
target, which is a provider-locked region that is F_LOCK'd during assembly
before any userspace delete is possible, and F_LOCK is never cleared,
so the flag is always already set when delete_region_store() runs for it.

The window described by the sashiko-bot requires userspace to concurrently
attach an F_LOCK-setting target to the same region.
I don't see a reachable path for that. And it can't be closed with a lock
in delete_region_store() because unregister_region() calls device_del()
before reset.
 
> 
> [Severity: High]
> This is a pre-existing issue, but does a similar bypass exist in
> store_targetN() when userspace manually detaches targets?
> 
> If a root user writes \n to a targetN sysfs attribute of a locked region,
> store_targetN() calls detach_target() which eventually reaches
> __cxl_decoder_detach(). This software teardown path lacks an F_LOCK check.
> 
> Because cxl_region_decode_reset() deliberately skips the hardware reset
> for F_LOCK regions, the software state is dropped while the hardware
> decoders remain committed.
> 
> The user could then write 0 to the size attribute, freeing the physical
> memory while it is still actively decoded by hardware.
> 
> Should store_targetN() or __cxl_decoder_detach() also be gated by
> CXL_REGION_F_LOCK to prevent userspace from tearing down the software
> state of locked regions?
> 
> >  	unregister_region(cxlr);
> >  
> >  	return len;
> 

Will send another patch fix for this one.

Best regards,
Richard Cheng.

> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/[email protected]?part=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.