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