RE: [PATCH] EDAC/mc: Fix error path ordering in edac_mc_alloc()
From: Zhuo, Qiuxu
Date: Tue Mar 31 2026 - 22:14:06 EST
> From: Borislav Petkov <bp@xxxxxxxxxx>
> [...]
> Subject: [PATCH] EDAC/mc: Fix error path ordering in edac_mc_alloc()
>
> From: "Borislav Petkov (AMD)" <bp@xxxxxxxxx>
>
> 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@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxx>
LGTM. Thanks.
Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@xxxxxxxxx>
[...]