使用Linux系统作为路由器时的内核内存泄漏

使用Linux系统作为路由器时的内核内存泄漏

我正在开发两个基于 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

在深入研究我不擅长的内核驱动程序代码之前,我想确定它是仅有的解决我的问题的解决方案。

任何形式的帮助将不胜感激!

相关内容