mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
net: mana: Guard mana_remove against double invocation
If PM resume fails (e.g., mana_attach() returns an error), mana_probe()
calls mana_remove(), which tears down the device and sets
gd->gdma_context = NULL and gd->driver_data = NULL.
However, a failed resume callback does not automatically unbind the
driver. When the device is eventually unbound, mana_remove() is invoked
a second time. Without a NULL check, it dereferences gc->dev with
gc == NULL, causing a kernel panic.
Add an early return if gdma_context or driver_data is NULL so the second
invocation is harmless. Move the dev = gc->dev assignment after the
guard so it cannot dereference NULL.
Fixes: 635096a86e ("net: mana: Support hibernation and kexec")
Signed-off-by: Erni Sri Satya Vennela <ernis@linux.microsoft.com>
Link: https://patch.msgid.link/20260420124741.1056179-4-ernis@linux.microsoft.com
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
6e8bc03349
commit
50271d7ec9
|
|
@ -3731,11 +3731,16 @@ void mana_remove(struct gdma_dev *gd, bool suspending)
|
|||
struct gdma_context *gc = gd->gdma_context;
|
||||
struct mana_context *ac = gd->driver_data;
|
||||
struct mana_port_context *apc;
|
||||
struct device *dev = gc->dev;
|
||||
struct device *dev;
|
||||
struct net_device *ndev;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
if (!gc || !ac)
|
||||
return;
|
||||
|
||||
dev = gc->dev;
|
||||
|
||||
disable_work_sync(&ac->link_change_work);
|
||||
cancel_delayed_work_sync(&ac->gf_stats_work);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user