🇰🇷 한글 설명
Linux 커널의 mlx5e 드라이버에서 SQ 재활성화 시 BQL(Byte Queue Limits) 카운터가 잘못 초기화되는 취약점이 발견되었습니다. 이로 인해 비행 중인 TX WQEs가 있는 채널의 카운터가 0으로 설정되어, 이후 완료 시 BUG_ON()을 유발하며 커널 패닉이 발생할 수 있습니다.
💡 쉬운 설명
네트워크 카드가 작동을 재개할 때 데이터 처리량을 계산하는 수치가 잘못 초기화되어 시스템이 멈출 수 있는 문제입니다. 데이터가 처리되는 도중에 계산기를 강제로 0으로 만들어 오류가 발생하는 상황입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: fix BQL reset on SQ re-activation
mlx5e_queue_start() deactivates and re-activates all channels but closes
only the queue being restarted. mlx5e_activate_txqsq() then
unconditionally calls netdev_tx_reset_queue(), zeroing the BQL counters
of channels that kept their in-flight TX WQEs. The next completion then
over-charges and trips the BUG_ON() in dql_completed():
kernel BUG at lib/dynamic_queue_limits.c:99!
RIP: 0010:dql_completed+0x23d/0x280
Call Trace:
<IRQ>
mlx5e_poll_tx_cq+0x668/0xa60
mlx5e_napi_poll+0x5b/0x7b0
net_rx_action+0x15a/0x580
Reset BQL only when the SQ has no bytes in flight (sq->cc == sq->pc).
In the case that reset is skipped, the outstanding WQEs will eventually
complete and rebalance the dql. The dql->limit is carried across the
reset.
📍 영향받는 시스템
Linux kernel (mlx5e driver 사용 시스템)
⚔️ 공격 벡터
특정 네트워크 트래픽 패턴을 유발하여 드라이버의 SQ 재활성화 로직을 트리거함으로써 커널 패닉 유도
🛡️ 대응 방법
mlx5e 드라이버의 BQL 리셋 로직이 수정된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 릴리스 버전인지 확인