mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
gem_init_one() calls gem_remove_one() when register_netdev() fails.
gem_remove_one() unregisters and frees resources owned by the net_device,
including the DMA block, MMIO mapping, PCI regions, and the net_device
itself. gem_init_one() then falls through to its own cleanup labels and
frees the same resources again.
Keep the register_netdev() error path in gem_init_one(): clear drvdata so
PM/remove paths do not see a half-registered device, remove the NAPI
instance added during probe, and let the existing cleanup labels release
the resources once.
The issue was found by a local static-analysis checker for probe error
paths. The reported path was manually inspected before sending this fix.
Compile-tested with CONFIG_SUNGEM=y. Runtime testing was not performed
because no sungem hardware is available.
Fixes:
|
||
|---|---|---|
| .. | ||
| cassini.c | ||
| cassini.h | ||
| Kconfig | ||
| ldmvsw.c | ||
| Makefile | ||
| niu.c | ||
| niu.h | ||
| sunbmac.c | ||
| sunbmac.h | ||
| sungem.c | ||
| sungem.h | ||
| sunhme.c | ||
| sunhme.h | ||
| sunqe.c | ||
| sunqe.h | ||
| sunvnet_common.c | ||
| sunvnet_common.h | ||
| sunvnet.c | ||