🇰🇷 한글 설명
Linux 커널의 mac80211 메시 네트워킹 코드에서 발생하는 메모리 누수 취약점입니다. mesh_preq_queue 객체들이 메시 인터페이스 제거 시 정리되지 않아 메모리 누수가 발생하며, mesh_path_flush_pending() 함수에서 preq_queue 항목들을 정리하여 해결됩니다.
💡 쉬운 설명
무선 네트워크 메시 기능에서 사용하는 메모리가 제거되지 않고 남아있는 버그입니다. 이는 시스템의 메모리를 점진적으로 낭비하게 되며 커널 패치를 통해 수정할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects
The hwmp code use objects of type mesh_preq_queue, added to a list in
ieee80211_if_mesh, to keep track of mpath we need to resolve. If the mpath
gets deleted, ex mesh interface is removed, the entries in that list will
never get cleaned. Fix this by flushing all corresponding items of the
preq_queue in mesh_path_flush_pending().
This should take care of KASAN reports like this:
unreferenced object 0xffff00000668d800 (size 128):
comm "kworker/u8:4", pid 67, jiffies 4295419552 (age 1836.444s)
hex dump (first 32 bytes):
00 1f 05 09 00 00 ff ff 00 d5 68 06 00 00 ff ff ..........h.....
8e 97 ea eb 3e b8 01 00 00 00 00 00 00 00 00 00 ....>...........
backtrace:
[<000000007302a0b6>] __kmem_cache_alloc_node+0x1e0/0x35c
[<00000000049bd418>] kmalloc_trace+0x34/0x80
[<0000000000d792bb>] mesh_queue_preq+0x44/0x2a8
[<00000000c99c3696>] mesh_nexthop_resolve+0x198/0x19c
[<00000000926bf598>] ieee80211_xmit+0x1d0/0x1f4
[<00000000fc8c2284>] __ieee80211_subif_start_xmit+0x30c/0x764
[<000000005926ee38>] ieee80211_subif_start_xmit+0x9c/0x7a4
[<000000004c86e916>] dev_hard_start_xmit+0x174/0x440
[<0000000023495647>] __dev_queue_xmit+0xe24/0x111c
[<00000000cfe9ca78>] batadv_send_skb_packet+0x180/0x1e4
[<000000007bacc5d5>] batadv_v_elp_periodic_work+0x2f4/0x508
[<00000000adc3cd94>] process_one_work+0x4b8/0xa1c
[<00000000b36425d1>] worker_thread+0x9c/0x634
[<0000000005852dd5>] kthread+0x1bc/0x1c4
[<000000005fccd770>] ret_from_fork+0x10/0x20
unreferenced object 0xffff000009051f00 (size 128):
comm "kworker/u8:4", pid 67, jiffies 4295419553 (age 1836.440s)
hex dump (first 32 bytes):
90 d6 92 0d 00 00 ff ff 00 d8 68 06 00 00 ff ff ..........h.....
36 27 92 e4 02 e0 01 00 00 58 79 06 00 00 ff ff 6'.......Xy.....
backtrace:
[<000000007302a0b6>] __kmem_cache_alloc_node+0x1e0/0x35c
[<00000000049bd418>] kmalloc_trace+0x34/0x80
[<0000000000d792bb>] mesh_queue_preq+0x44/0x2a8
[<00000000c99c3696>] mesh_nexthop_resolve+0x198/0x19c
[<00000000926bf598>] ieee80211_xmit+0x1d0/0x1f4
[<00000000fc8c2284>] __ieee80211_subif_start_xmit+0x30c/0x764
[<000000005926ee38>] ieee80211_subif_start_xmit+0x9c/0x7a4
[<000000004c86e916>] dev_hard_start_xmit+0x174/0x440
[<0000000023495647>] __dev_queue_xmit+0xe24/0x111c
[<00000000cfe9ca78>] batadv_send_skb_packet+0x180/0x1e4
[<000000007bacc5d5>] batadv_v_elp_periodic_work+0x2f4/0x508
[<00000000adc3cd94>] process_one_work+0x4b8/0xa1c
[<00000000b36425d1>] worker_thread+0x9c/0x634
[<0000000005852dd5>] kthread+0x1bc/0x1c4
[<000000005fccd770>] ret_from_fork+0x10/0x20
📍 영향받는 시스템
Linux kernel 5.15 이상 (mac80211 메시 네트워킹 기능 사용하는 시스템), 특히 무선 메시 네트워크 라우팅 활성 시스템
⚔️ 공격 벡터
직접 공격 불가능 - 메모리 누수로 인한 DoS (서비스 거부) 가능성 있음
🛡️ 대응 방법
Linux 커널을 최신 패치 버전으로 업그레이드하거나 mesh_path_flush_pending() 함수 수정사항 포함된 커널 버전 설치
🔧 검증 코드
kallsyms에서 mesh_path_flush_pending 함수가 존재하면 커널에 해당 함수가 포함되어 있는지 확인 가능하며, 커널 버전이 5.15 이상이면 최신 보안 패치 적용 여부를 확인해야 합니다.
grep -q 'mesh_path_flush_pending' /proc/kallsyms && echo 'Function exists' || uname -r | awk -F. '{if ($1 >= 6 || ($1 == 5 && $2 >= 15)) print "Check latest kernel patches"}' 2>/dev/null