🇰🇷 한글 설명
Linux 커널의 mlx5 E-Switch 드라이버에서 발생하는 취약점으로, 펌웨어 치명적 오류 복구 과정 중 vport 비활성화 시 mc_list가 잘못 재구성될 수 있습니다. 이로 인해 FDB 서브트리가 손상되고 dangling flow_rule 포인터가 남게 되어, 참조 횟수 언더플로우(underflow) 또는 Use-After-Free(UAF) 및 페이지 폴트(Page Fault) 오류가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 장치(Mellanox)의 오류를 복구하는 과정에서 메모리 관리 규칙이 꼬여 시스템이 충돌하거나 멈출 수 있는 문제입니다. 잘못된 메모리 참조로 인해 컴퓨터의 핵심 기능인 커널이 비정상적으로 종료될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5: E-Switch, prevent mc_list repopulation during vport disable
In mlx5_esw_vport_disable(), move esw_apply_vport_rx_mode() ahead
of esw_vport_change_handle_locked() so vport->allmulti_rule is
NULL before the change handler observes it.
During FW-fatal recovery the disable runs while dev->state ==
INTERNAL_ERROR. The promisc query inside esw_update_vport_rx_mode()
fails and returns early, leaving vport->allmulti_rule intact, so
esw_update_vport_mc_promisc() runs and adds MLX5_ACTION_ADD entries
to vport->mc_list whose flow rules are then installed in the FDB
by esw_add_mc_addr(). esw_destroy_legacy_table() tears down the
FDB with those refs still held, corrupting the sub-tree and
leaving dangling flow_rule pointers in vport->mc_list.
Two-stage failure on `echo 1 > /sys/bus/pci/devices/<bdf>/reset`:
refcount_t: underflow; use-after-free.
tree_put_node+0xef/0x110 [mlx5_core]
clean_tree+0x44/0xd0 [mlx5_core] (x5)
mlx5_fs_core_cleanup+0x57/0x1c0 [mlx5_core]
mlx5_unload+0x65/0xd0 [mlx5_core]
... mlx5_health_try_recover
BUG: unable to handle page fault for address: 0000000003000055
down_write+0x1c/0x60
mlx5_del_flow_rules+0x33/0x1f0 [mlx5_core]
esw_del_mc_addr+0x7b/0x170 [mlx5_core]
esw_apply_vport_addr_list+0x56/0xf0 [mlx5_core]
esw_vport_change_handle_locked+0x28b/0x310 [mlx5_core]
mlx5_esw_vport_enable+0x270/0x4a0 [mlx5_core]
... mlx5_load ... mlx5_health_try_recover
esw_apply_vport_rx_mode(false, false) clears vport->allmulti_rule
via its local state machine even when the FW del fails. With the
rule NULL the !IS_ERR_OR_NULL(allmulti_rule) gate in the change
handler closes, no rules are installed during disable, and the
reload starts with a clean mc_list.
📍 영향받는 시스템
Linux kernel (mlx5_core driver 사용 시스템)
⚔️ 공격 벡터
로컬 공격자가 PCI 장치 리셋(/sys/bus/pci/devices/<bdf>/reset)을 유도하여 시스템 충돌 유발 가능
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 mlx5_esw_vport_disable() 함수 로직 수정 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인하십시오.