
私はToradex colibri IMX6ULL SoMに基づいて2つの組み込みLinuxシステム(kernel-6.2.10)を開発しています。最初(システムA)はWi-Fiアクセスポイント(hostapdを使用)として機能するように構成され、2番目(システム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
私がうまくいかないカーネルドライバコードを探る前に、それが正しいことを確認したかったのです。ただ私の問題に対する解決策。
どんな助けでも大変感謝します!