x86/mce/amd: Do proper cleanup on error paths

Drop kobject reference counts properly on error in the banks and blocks
allocation functions.

 [ bp: Write commit message. ]

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20200403161943.1458-2-bp@alien8.de
This commit is contained in:
Thomas Gleixner 2020-02-14 18:32:43 +01:00 committed by Borislav Petkov
parent 8f3d9f3542
commit ada018b15c

View File

@ -1267,13 +1267,12 @@ recurse:
if (b)
kobject_uevent(&b->kobj, KOBJ_ADD);
return err;
return 0;
out_free:
if (b) {
kobject_put(&b->kobj);
list_del(&b->miscj);
kfree(b);
kobject_put(&b->kobj);
}
return err;
}
@ -1339,6 +1338,7 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
goto out;
}
/* Associate the bank with the per-CPU MCE device */
b->kobj = kobject_create_and_add(name, &dev->kobj);
if (!b->kobj) {
err = -EINVAL;
@ -1357,16 +1357,17 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
err = allocate_threshold_blocks(cpu, b, bank, 0, msr_ops.misc(bank));
if (err)
goto out_free;
goto out_kobj;
per_cpu(threshold_banks, cpu)[bank] = b;
return 0;
out_free:
out_kobj:
kobject_put(b->kobj);
out_free:
kfree(b);
out:
out:
return err;
}