[PATCH] can: sja1000: fix netdev leak for non-contiguous channels
From: Wentao Liang
Date: Tue Nov 03 2026 - 05:26:03 EST
pcan_add_channels() stores a registered net_device at card->channel[i],
where i is the hardware channel index, but only increments
card->chan_count by one. When a lower channel is absent or fails to
register and a higher one succeeds, chan_count no longer covers the
used slot. pcan_free_channels() then iterates only up to chan_count and
leaks the net_device of the higher channel; the LED timer and the
interrupt handler also skip it.
Record the highest used channel index plus one in chan_count so that
every iterator covers all channel slots.
Fixes: 2b61972b7421 ("can: sja1000: add support for PEAK-System PCMCIA card")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/net/can/sja1000/peak_pcmcia.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/can/sja1000/peak_pcmcia.c b/drivers/net/can/sja1000/peak_pcmcia.c
index c3c2aa21da47..bba51dd808f8 100644
--- a/drivers/net/can/sja1000/peak_pcmcia.c
+++ b/drivers/net/can/sja1000/peak_pcmcia.c
@@ -574,7 +574,7 @@ static int pcan_add_channels(struct pcan_pccard *card)
}
card->channel[i].netdev = netdev;
- card->chan_count++;
+ card->chan_count = i + 1;
/* set corresponding led on in the new ccr */
ccr &= ~PCC_CCR_LED_OFF_CHAN(i);
--
2.34.1