🇰🇷 한글 설명
Linux 커널의 mlx5 네트워크 드라이버에서 EEH(PCI 오류 복구) 이벤트 발생 시 vport의 멀티캐스트·유니캐스트 스티어링 규칙이 teardown 경로에서 삭제되지 않아, 초기화 과정에서 이미 무효화된 소프트웨어 규칙을 다시 삭제하려다 커널 크래시가 발생하는 문제입니다. 규칙 삭제 직후 포인터를 null로 설정하도록 수정되었습니다.
💡 쉬운 설명
서버의 네트워크 카드가 일시적 오류에서 복구되는 과정에서 이미 사라진 내부 설정을 다시 지우려다 시스템이 멈출 수 있는 문제입니다. 패치를 적용하면 지워진 설정을 더 이상 건드리지 않아 이 충돌이 방지됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5: Fix steering rules cleanup
vport's mc, uc and multicast rules are not deleted in teardown path when
EEH happens. Since the vport's promisc settings(uc, mc and all) in
firmware are reset after EEH, mlx5 driver will try to delete the above
rules in the initialization path. This cause kernel crash because these
software rules are no longer valid.
Fix by nullifying these rules right after delete to avoid accessing any dangling
pointers.
Call Trace:
__list_del_entry_valid+0xcc/0x100 (unreliable)
tree_put_node+0xf4/0x1b0 [mlx5_core]
tree_remove_node+0x30/0x70 [mlx5_core]
mlx5_del_flow_rules+0x14c/0x1f0 [mlx5_core]
esw_apply_vport_rx_mode+0x10c/0x200 [mlx5_core]
esw_update_vport_rx_mode+0xb4/0x180 [mlx5_core]
esw_vport_change_handle_locked+0x1ec/0x230 [mlx5_core]
esw_enable_vport+0x130/0x260 [mlx5_core]
mlx5_eswitch_enable_sriov+0x2a0/0x2f0 [mlx5_core]
mlx5_device_enable_sriov+0x74/0x440 [mlx5_core]
mlx5_load_one+0x114c/0x1550 [mlx5_core]
mlx5_pci_resume+0x68/0xf0 [mlx5_core]
eeh_report_resume+0x1a4/0x230
eeh_pe_dev_traverse+0x98/0x170
eeh_handle_normal_event+0x3e4/0x640
eeh_handle_event+0x4c/0x370
eeh_event_handler+0x14c/0x210
kthread+0x168/0x1b0
ret_from_kernel_thread+0x5c/0x84
📍 영향받는 시스템
패치 이전의 Linux 커널을 사용하는 Mellanox/NVIDIA mlx5 네트워크 카드 장착 시스템 (EEH 지원 Power 서버 등)
⚔️ 공격 벡터
로컬 공격자가 PCI 오류(EEH)를 유발할 수 있는 환경에서 서비스 거부(커널 크래시)를 일으킬 수 있으며, 원격 공격 경로는 명시되지 않음
🛡️ 대응 방법
Linux 커널을 이 취약점 수정이 포함된 최신 안정 버전으로 업데이트하고 재부팅
🔧 검증 코드
커널 버전이 수정 패치가 포함된 배포판의 최신 업데이트 버전 이상인지 확인하고, mlx5_core 모듈이 로드되지 않았다면 이 취약점의 영향을 받지 않는 것으로 판단
uname -r && (lsmod | grep mlx5_core || echo 'mlx5_core not loaded')