Merge tag 'edac_urgent_for_v6.19_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras

Pull EDAC fixes from Borislav Petkov:
"Make sure the memory-mapped memory controller registers BAR gets
unmapped when the driver memory allocation fails

Fix that in both x38 and i3200 EDAC drivers as former has copied the
bug from the latter, it looks like"

* tag 'edac_urgent_for_v6.19_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras:
EDAC/x38: Fix a resource leak in x38_probe1()
EDAC/i3200: Fix a resource leak in i3200_probe1()

+12 -8
+6 -5
drivers/edac/i3200_edac.c
··· 358 layers[1].type = EDAC_MC_LAYER_CHANNEL; 359 layers[1].size = nr_channels; 360 layers[1].is_virt_csrow = false; 361 - mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, 362 - sizeof(struct i3200_priv)); 363 if (!mci) 364 - return -ENOMEM; 365 366 edac_dbg(3, "MC: init mci\n"); 367 ··· 422 return 0; 423 424 fail: 425 iounmap(window); 426 - if (mci) 427 - edac_mc_free(mci); 428 429 return rc; 430 }
··· 358 layers[1].type = EDAC_MC_LAYER_CHANNEL; 359 layers[1].size = nr_channels; 360 layers[1].is_virt_csrow = false; 361 + 362 + rc = -ENOMEM; 363 + mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, sizeof(struct i3200_priv)); 364 if (!mci) 365 + goto unmap; 366 367 edac_dbg(3, "MC: init mci\n"); 368 ··· 421 return 0; 422 423 fail: 424 + edac_mc_free(mci); 425 + unmap: 426 iounmap(window); 427 428 return rc; 429 }
+6 -3
drivers/edac/x38_edac.c
··· 341 layers[1].type = EDAC_MC_LAYER_CHANNEL; 342 layers[1].size = x38_channel_num; 343 layers[1].is_virt_csrow = false; 344 mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, 0); 345 if (!mci) 346 - return -ENOMEM; 347 348 edac_dbg(3, "MC: init mci\n"); 349 ··· 406 return 0; 407 408 fail: 409 iounmap(window); 410 - if (mci) 411 - edac_mc_free(mci); 412 413 return rc; 414 }
··· 341 layers[1].type = EDAC_MC_LAYER_CHANNEL; 342 layers[1].size = x38_channel_num; 343 layers[1].is_virt_csrow = false; 344 + 345 + 346 + rc = -ENOMEM; 347 mci = edac_mc_alloc(0, ARRAY_SIZE(layers), layers, 0); 348 if (!mci) 349 + goto unmap; 350 351 edac_dbg(3, "MC: init mci\n"); 352 ··· 403 return 0; 404 405 fail: 406 + edac_mc_free(mci); 407 + unmap: 408 iounmap(window); 409 410 return rc; 411 }