我正在开发两个基于 Toradex colibri IMX6ULL SoM 的嵌入式 Linux 系统 (kernel-6.2.10)。第一个(系统 A)配置为用作 wifi 接入点(使用 hostapd),第二个(系统 B)连接到该接入点(使用 wpa_supplicant)。
当我想通过系统 A 从系统 B 到我的 PC 进行 FTP 数据传输时,我观察到系统 A 发生内存泄漏。这种情况仅发生在该配置中。将数据从系统 A 传输到我的 PC 没有显示任何内存泄漏。
它似乎可以通过任何类型的网络通信来重现,但通过 FTP 数据传输更容易重现。
使用 kmemleak 发现内存泄漏似乎来自 Marvell 驱动程序 mwifiex :
unreferenced object 0x83a2f540 (size 184):
comm "kworker/0:2", pid 43, jiffies 4294947832 (age 162.950s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<802864f0>] kmem_cache_alloc+0x188/0x2c4
[<808946f0>] __netdev_alloc_skb+0xe8/0x194
[<7f01af44>] ieee80211_amsdu_to_8023s+0x1b0/0x498 [cfg80211]
[<7f1528e4>] mwifiex_11n_dispatch_pkt+0x7c/0x174 [mwifiex]
[<7f1535ac>] mwifiex_11n_rx_reorder_pkt+0x388/0x3dc [mwifiex]
[<7f1640f4>] mwifiex_process_uap_rx_packet+0xc0/0x200 [mwifiex]
[<7f075ee8>] mwifiex_decode_rx_packet+0x1d4/0x224 [mwifiex_sdio]
[<7f07858c>] mwifiex_process_int_status+0x850/0xd70 [mwifiex_sdio]
[<7f1480a4>] mwifiex_main_process+0x124/0xa30 [mwifiex]
[<8080b9c4>] process_sdio_pending_irqs+0xe4/0x1d8
[<8080bc90>] sdio_irq_work+0x3c/0x64
[<80134fa0>] process_one_work+0x1d8/0x3e4
[<80135204>] worker_thread+0x58/0x54c
[<8013c9f0>] kthread+0xcc/0xe8
[<80100148>] ret_from_fork+0x14/0x2c
unreferenced object 0x82fa2a40 (size 184):
comm "kworker/0:2", pid 43, jiffies 4294947833 (age 162.940s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<80286228>] kmem_cache_alloc_node+0x198/0x2d8
[<808922b8>] __alloc_skb+0x10c/0x168
[<80894644>] __netdev_alloc_skb+0x3c/0x194
[<7f14ce9c>] mwifiex_alloc_dma_align_buf+0x14/0x40 [mwifiex]
[<7f07852c>] mwifiex_process_int_status+0x7f0/0xd70 [mwifiex_sdio]
[<7f1480a4>] mwifiex_main_process+0x124/0xa30 [mwifiex]
[<8080b9c4>] process_sdio_pending_irqs+0xe4/0x1d8
[<8080bc90>] sdio_irq_work+0x3c/0x64
[<80134fa0>] process_one_work+0x1d8/0x3e4
[<80135204>] worker_thread+0x58/0x54c
[<8013c9f0>] kthread+0xcc/0xe8
[<80100148>] ret_from_fork+0x14/0x2c
在深入研究我不擅长的内核驱动程序代码之前,我想确定它是仅有的解决我的问题的解决方案。
任何形式的帮助将不胜感激!