Re: [PATCH 1/2] cxl/region: Fix potential invalid pointer dereference

From: Dan Carpenter
Date: Mon Apr 29 2024 - 06:30:45 EST


On Mon, Apr 29, 2024 at 10:25:35AM +0000, Zhijian Li (Fujitsu) wrote:
> > 3084 mutex_lock(&cxlrd->range_lock);
> > 3085 region_dev = device_find_child(&cxlrd->cxlsd.cxld.dev, hpa,
> > 3086 match_region_by_range);
> > 3087 if (!region_dev) {
> > 3088 cxlr = construct_region(cxlrd, cxled);
> > 3089 region_dev = &cxlr->dev;
> > ^^^^^^^^^^^
> > This is not a dereference, it's just pointer math. In in this case it's
> > the same as saying:
> >
> > region_dev = (void *)cxlr;
>
>
> You are right, a equivalent code could be:
> region_dev = ((char *)cxlr) + offsetof(struct cxl_region, dev);
>
>

Correct. But offsetof() is zero. It's the same math that to_cxl_region()
does.

regards,
dan carpenter