cxl/region: decrement ->nr_targets on error in cxl_region_attach()
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 1 Aug 2022 10:20:58 +0000 (13:20 +0300)
committerDan Williams <dan.j.williams@intel.com>
Mon, 1 Aug 2022 21:24:34 +0000 (14:24 -0700)
The ++ needs a match -- on the clean up path.  If the p->nr_targets
value gets to be more than 16 it leads to uninitialized data in
cxl_port_setup_targets().

drivers/cxl/core/region.c:995 cxl_port_setup_targets() error: uninitialized symbol 'eiw'.

Fixes: 27b3f8d13830 ("cxl/region: Program target lists")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/YuepCvUAoCtdpcoO@kili
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core/region.c

index 516ba7e..55691f6 100644 (file)
@@ -1218,12 +1218,14 @@ static int cxl_region_attach(struct cxl_region *cxlr,
        if (p->nr_targets == p->interleave_ways) {
                rc = cxl_region_setup_targets(cxlr);
                if (rc)
-                       goto err;
+                       goto err_decrement;
                p->state = CXL_CONFIG_ACTIVE;
        }
 
        return 0;
 
+err_decrement:
+       p->nr_targets--;
 err:
        for (iter = ep_port; !is_cxl_root(iter);
             iter = to_cxl_port(iter->dev.parent))