In the Linux kernel, the following vulnerability has been resolved:
x86/MCE/AMD: Fix memory leak when thresholdcreatebank() fails
In mcethresholdcreatedevice(), if thresholdcreatebank() fails, the previously allocated threshold banks array @bp will be leaked because the call to mcethresholdremovedevice() will not free it.
This happens because mcethresholdremovedevice() fetches the pointer through the thresholdbanks per-CPU variable but bp is written there only after the bank creation is successful, and not before, when thresholdcreatebank() fails.
Add a helper which unwinds all the bank creation work previously done and pass into it the previously allocated threshold banks array for freeing.
[ bp: Massage. ]