RE: [PATCH] EDAC/mc: Fix error path ordering in edac_mc_alloc()

Zhuo, Qiuxu
2026-04-01T02:11:16Z

> From: Borislav Petkov <bp@kernel.org>
> [...]
> Subject: [PATCH] EDAC/mc: Fix error path ordering in edac_mc_alloc()
>
> From: "Borislav Petkov (AMD)" <bp@alien8.de>
>
> When the mci->pvt_info allocation in edac_mc_alloc() fails, the error path will
> call put_device() which will end up calling the device's release function.
>
> However, the init ordering is wrong such that device_initialize() happens
> *after* the failed allocation and thus the device itself and the release function
> pointer are not initialized yet when they're called:
>
> MCE: In-kernel MCE decoding enabled.
> ------------[ cut here ]------------
> kobject: '(null)': is not initialized, yet kobject_put() is being called.
> WARNING: lib/kobject.c:734 at kobject_put, CPU#22: systemd-udevd
> CPU: 22 UID: 0 PID: 538 Comm: systemd-udevd Not tainted 7.0.0-rc1+ #2
> PREEMPT(full)
> RIP: 0010:kobject_put
> Call Trace:
> <TASK>
> edac_mc_alloc+0xbe/0xe0 [edac_core]
> amd64_edac_init+0x7a4/0xff0 [amd64_edac]
> ? __pfx_amd64_edac_init+0x10/0x10 [amd64_edac]
> do_one_initcall
> ...
>
> Reorder the calling sequence such that the device is initialized and thus the
> release function pointer is properly set before it can be used.
>
> This was found by Claude while reviewing another EDAC patch.
>
> Fixes: 0bbb265f7089 ("EDAC/mc: Get rid of silly one-shot struct allocation in
> edac_mc_alloc()")
> Reported-by: Claude Code:claude-opus-4.5
> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
> Cc: <stable@kernel.org>

LGTM. Thanks.

Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com> …