CVE-2026-80842 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: bridge: mcast: 마스터 VLAN의 multicast context에 대한 use-after-free 수정
br_multicast_toggle_one_vlan()은 VLAN의 multicast 컨텍스트를 중지하기 전에 br->multicast_lock 하에서 BR_VLFLAG_MCAST_ENABLED 플래그를 지웁니다. 이는 teardown handshake입니다: lockless readers는 br_multicast_ctx_should_use() -> br_multicast_ctx_vlan_disabled() 경로를 통해 해당 플래그에 게이트합니다. 따라서 잠금 아래서 이 플래그가 지워지면 어떤 reader도 컨텍스트를 다시 활성화할 수 없습니다.
마스터 VLAN의 경우 handshake가 실행되지 않습니다. __vlan_del()은 br_vlan_put_master() 호출 전에 BRIDGE_VLAN_INFO_BRENTRY를 지우므로, !br_vlan_is_brentry(vlan) 조건에서 br_multicast_toggle_one_vlan(masterv, false)는 조기에 반환합니다. 플래그는 설정된 상태로 남아 있고 br->multicast_lock은 절대 획득되지 않습니다. 그 후 br_vlan_put_master()는 br_multicast_ctx_deinit()에서 컨텍스트를 정리하고 call_rcu()를 통해 VLAN을 해제(free)합니다. 이때 rcu_read_lock() 내부에 있는 reader가 컨텍스트가 활성화되어 있다고 보고 이를 다시 활성화(arms)합니다. 포트 및 포트-VLAN 분기는 br_vlan_is_brentry() 테스트가 없으며 플래그를 br->multicast_lock 하에서 전환하므로 영향을 받지 않습니다.
reader는 bridge 전송 경로입니다. 마스터 VLAN의 경우, pmctx = NULL로 설정하여 br_multicast_rcv()가 brmctx = &vlan->br_mcast_ctx를 선택합니다. 따라서 브리지 장치로 보내진 IGMP 패킷은 br_multicast_ctx_deinit()가 이미 타이머를 중지한 후에 컨텍스트의 타이머를 다시 활성화합니다.
BUG: KASAN: slab-use-after-free in detach_if_pending+0x412/0x4a0 Write of size 8 at addr ffff88810ac39918 by task brmc/601 __mod_timer+0x51a/0xc50 br_multicast_host_join+0x25b/0x390 __br_multicast_add_group+0x468/0x530 br_ip4_multicast_add_group+0x1a0/0x260 br_multicast_rcv+0x2cda/0x61e0 br_dev_xmit+0x6c4/0x1540 Allocated by task 610: br_vlan_add+0x111/0xb40 br_vlan_info+0x370/0x3e0 Freed by task 0: kfree+0x1a7/0x4f0 rcu_core+0x7dc/0x10a0
활성화 시에만 br_vlan_is_brentry()를 테스트하십시오. 이는 바로 옆에 있는 br_multicast_ctx_vlan_global_disabled() 테스트와 동일합니다. 비활성화 시에는 항상 br_multicast_ctx_deinit()가 컨텍스트를 정리하기 전에 br->multicast_lock 하에서 BR_VLFLAG_MCAST_ENABLED 플래그를 지웁니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.