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

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
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -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,15 +1357,16 @@ 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_kobj:
	kobject_put(b->kobj);
out_free:
	kfree(b);

out:
	return err;
}