I am seeing what looks like a kernel/driver memory leak or severe memory fragmentation issue on a GL-XE3000. The router itself continues routing, but the GL.iNet dashboard stops responding because nginx gets killed by the OOM killer.
Device details:
- Model: GL.iNet GL-XE3000
- Firmware: 4.8.3
- Build: 902
- Build date: 2025-11-06 20:12:02
- Type: release3
- Kernel: 5.4.211
- Target: mediatek/mt7981
- Wi-Fi driver package:
kmod-mt_wifi - 5.4.211+TEST-16 - Uptime when issue occurred: about 6 days 17 hours
Symptoms:
http://192.168.8.1/andhttps://192.168.8.1/stop responding.- Ports
80and443are closed/refused because nginx is killed. - Router still works as gateway.
- DNS still responds.
- SSH still works, though sometimes slowly.
- LuCI on
8080/8443remains available. - Restarting nginx only helps briefly unless memory pressure is relieved.
Memory state during the issue:
MemTotal: 491376 kB
MemAvailable: ~14-35 MB
Slab: ~322 MB
SReclaimable: ~7 MB
SUnreclaim: ~315 MB
SwapTotal: 0 kB initially
After I temporarily added a 128 MB swap file and restarted nginx, the dashboard came back, but the underlying SUnreclaim remained very high.
Relevant OOM/kernel logs:
Out of memory: Killed process ... nginx
worker process ... exited on signal 9
slab_reclaimable:1741 slab_unreclaimable:79031
slab_reclaimable:1736 slab_unreclaimable:78899
The strongest clue is this kernel allocation failure stack from the MediaTek Wi-Fi driver path:
lua: page allocation failure: order:3, mode:0x40a20(GFP_ATOMIC|__GFP_COMP)
os_alloc_mem+0x1c/0x38 [mt_wifi]
RTMPIoctlGetMacTableStaInfo+0x28/0x430 [mt_wifi]
RTMP_AP_IoctlHandle+0x358/0x900 [mt_wifi]
rt28xx_ap_ioctl+0x97c/0x1188 [mt_wifi]
rt28xx_ioctl+0x50/0x88 [mt_wifi]
ap_iw_handler+0x3c/0x310 [mt_wifi]
ioctl_private_call
wireless_process_ioctl
wext_handle_ioctl
7981@C12L1,RTMPIoctlGetMacTableStaInfo() 7101: Allocate memory fail!!!
The process involved was:
/usr/bin/lua /usr/bin/gl_clients_update
The modem stack was also active/noisy around the same time:
gl_modem invoked oom-killer
modem_AT: get_AT_device api Loop count:1
gl_modem: Start lock operator initialization...
My current interpretation:
This does not look like normal userspace memory usage. Process RSS was modest, conntrack count was normal, and socket counts were normal. The problem appears to be unreclaimable kernel slab growth, possibly triggered or exposed by repeated client scanning via gl_clients_update and the mt_wifi driver, with modem polling adding pressure.
Temporary mitigations I applied:
worker_processes auto -> worker_processes 1
added temporary 128 MB swap file
restarted nginx
This brought the dashboard back, but it does not solve the underlying kernel memory growth.
Questions:
-
Is there a known memory leak or fragmentation issue in kmod-mt_wifi / RTMPIoctlGetMacTableStaInfo() for GL-XE3000 / MT7981?
-
Is firmware 4.8.3 build 902 affected?
-
Is there a newer firmware, U-Boot, or Wi-Fi driver build that specifically addresses unreclaimable slab growth or nginx/dashboard OOM?
-
Is it safe/recommended to disable or reduce gl_clients_update polling as a workaround?
-
Are there diagnostics you want me to collect before rebooting, since rebooting clears the slab memory?
Thanks.


