Commit ada018b1 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Borislav Petkov

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: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20200403161943.1458-2-bp@alien8.de
parent 8f3d9f35
...@@ -1267,13 +1267,12 @@ static int allocate_threshold_blocks(unsigned int cpu, struct threshold_bank *tb ...@@ -1267,13 +1267,12 @@ static int allocate_threshold_blocks(unsigned int cpu, struct threshold_bank *tb
if (b) if (b)
kobject_uevent(&b->kobj, KOBJ_ADD); kobject_uevent(&b->kobj, KOBJ_ADD);
return err; return 0;
out_free: out_free:
if (b) { if (b) {
kobject_put(&b->kobj);
list_del(&b->miscj); list_del(&b->miscj);
kfree(b); kobject_put(&b->kobj);
} }
return err; return err;
} }
...@@ -1339,6 +1338,7 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank) ...@@ -1339,6 +1338,7 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank)
goto out; goto out;
} }
/* Associate the bank with the per-CPU MCE device */
b->kobj = kobject_create_and_add(name, &dev->kobj); b->kobj = kobject_create_and_add(name, &dev->kobj);
if (!b->kobj) { if (!b->kobj) {
err = -EINVAL; err = -EINVAL;
...@@ -1357,16 +1357,17 @@ static int threshold_create_bank(unsigned int cpu, unsigned int bank) ...@@ -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)); err = allocate_threshold_blocks(cpu, b, bank, 0, msr_ops.misc(bank));
if (err) if (err)
goto out_free; goto out_kobj;
per_cpu(threshold_banks, cpu)[bank] = b; per_cpu(threshold_banks, cpu)[bank] = b;
return 0; return 0;
out_free: out_kobj:
kobject_put(b->kobj);
out_free:
kfree(b); kfree(b);
out:
out:
return err; return err;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment