Re: [PATCH v11 17/31] cxl/mem: Enforce tag-group semantics

Anisa Su <[email protected]> Wed, 29 Jul 2026 01:41:06 -0700
Newsgroups dev.linux.lists.nvdimm,dev.linux.lists.sashiko-reviews,org.kernel.vger.linux-cxl
Message-ID <[email protected]>
On Thu, Jun 25, 2026 at 06:24:18PM +0000, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> 
> Pre-existing issues:
> - [High] Untagged extents spanning different DC partitions and DAX regions are incorrectly coalesced and assigned to the same region.

Fixed in patch 12. extract_tag_group() originally put all untagged
extents into the same tag_group. This has been fixed to put each
untagged extent into its own tag_group so they are not coalesced and
assigned to the same region.

> - [High] Fully duplicate extent groups are incorrectly rejected and omitted from the device response.

Duplicate false positive from patch 14 and 16.
> --
> 
> commit c2cf18ae81b1c32953f39b06aeaa9e153f4ac609
> Author: Anisa Su <[email protected]>
> 
> cxl/mem: Enforce tag-group semantics
> 
> This commit completes tag-group validation. It adds sequence integrity
> checks to verify that sharable partitions have dense shared_extn_seq
> values, and verifies that tagged allocations do not span DC partitions.
> 
> > diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c
> > index 14ba263044f08..7967b0db2c512 100644
> > --- a/drivers/cxl/core/mbox.c
> > +++ b/drivers/cxl/core/mbox.c
> 
> [ ... ]
> 
> > +static int cxl_check_group_partition(struct cxl_memdev_state *mds,
> > +				     const uuid_t *tag,
> > +				     const struct list_head *group)
> > +{
> > +	struct device *dev = mds->cxlds.dev;
> > +	const struct cxl_dpa_partition *first_part = NULL;
> > +	u64 first_dpa = 0;
> > +	struct cxl_extent_list_node *pos;
> > +
> > +	if (uuid_is_null(tag) || list_empty(group))
> > +		return 0;
> 
> [Severity: High]
> This is a pre-existing issue, but does this explicit bypass for untagged
> extents allow them to span different DC partitions?
> 
> If a device sends multiple untagged DC add capacity events spanning
> different partitions, cxl_add_pending() appears to extract them all into a
> single group.
> 
> Since this check returns 0 for null UUIDs, cxl_realize_group() processes them
> together. Would cxlr_add_extent() then register them all under the DAX region
> of the first extent, effectively merging extents from different partitions into
> the same region's resource tree?
> 
> [ ... ]
> 
> >  static int cxl_realize_group(struct cxl_memdev_state *mds, const uuid_t *tag,
> > -			     struct list_head *group, bool existing)
> > +			     struct list_head *group, bool shareable,
> > +			     bool existing)
> >  {
> >  	struct device *dev = mds->cxlds.dev;
> >  	struct cxl_extent_list_node *pos, *tmp;
> >  	struct cxl_dc_tag_group *tag_group;
> >  	int group_cnt = 0;
> > +	u16 seq_num;
> >  	int rc;
> >  
> > +	seq_num = -1;
> >  	list_for_each_entry_safe(pos, tmp, group, list) {
> > -		/*
> > -		 * Pass the device-stamped 0-based shared_extn_seq through
> > -		 * unchanged as the dax-side @seq_num (0..n-1).
> > -		 */
> > -		u16 seq = le16_to_cpu(pos->extent->shared_extn_seq);
> > +		if (shareable)
> > +			seq_num = le16_to_cpu(pos->extent->shared_extn_seq);
> > +		else
> > +			seq_num++;
> >  
> > -		if (cxl_add_extent(mds, pos->extent, seq) < 0) {
> > +		if (cxl_add_extent(mds, pos->extent, seq_num) < 0) {
> 
> [Severity: High]
> This is a pre-existing issue, but what happens if a device resends a tag group
> where all extents have already been accepted?
> 
> If cxl_add_extent() detects a duplicate, it returns 0 without calling
> cxlr_add_extent(). If this happens for every extent in the group,
> mds->add_ctx.group is never allocated and remains NULL.
> 
> Does this cause the subsequent if (!tag_group) check in this function to drop
> the group and return -ENXIO instead of returning group_cnt to acknowledge
> the extents back to the device?
> 
> >  			dev_dbg(dev,
> >  				"Tag %pUb: failed to add extent DPA:%#llx LEN:%#llx\n",
> >  				tag,
> > @@ -1412,15 +1532,22 @@ static int cxl_realize_group(struct cxl_memdev_state *mds, const uuid_t *tag,
> 
> -- 
> Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=17