🇰🇷 한글 설명
Linux 커널의 qede 드라이버에서 TPA 단편 처리 중 NULL 포인터 역참조가 발생하는 취약점입니다. 메모리 압박 상황에서 특정 할당 실패 시 데이터 포인터가 초기화되지 않은 상태로 Rx 링에 반환되어 커널 패닉을 유발합니다.
💡 쉬운 설명
컴퓨터 메모리가 부족할 때 네트워크 드라이버가 잘못된 주소를 참조하여 시스템이 갑자기 멈추거나 꺼지는 현상입니다. 데이터가 들어갈 자리가 비어있는데 시스템이 이를 사용하려다 오류가 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
qede: Fix NULL pointer dereference in TPA fragment processing
Under memory pressure, the qede driver encounters NULL pointer
dereferences when processing TPA continuation fragments.
Commit 8a8633978b84 ("qede: Add build_skb() support.") accidentally
dropped the assignment of tpa_info->buffer.data in qede_tpa_start().
When memory pressure causes an SKB allocation failure in qede_tpa_start(),
the driver sets tpa_start_fail = true and attempts to recycle the physical
page later in qede_tpa_end() via qede_reuse_page(). However, because
buffer.data was left uninitialized (NULL), qede_reuse_page() pushes a
"ghost" BD (valid DMA mapping but NULL data pointer) back into the
active Rx ring.
The next time the hardware uses this ring slot, it passes a NULL page
to qede_fill_frag_skb(), causing a kernel panic.
Example crash from production system:
BUG: unable to handle kernel NULL pointer dereference at 0x8
RIP: qede_fill_frag_skb+0x96/0x430 [qede]
Call Trace:
qede_rx_int+0xb06/0x1de0
qede_poll+0x2f4/0x6c0
__napi_poll+0x2d/0x130
Fix the root cause by restoring the tpa_info->buffer.data assignment
in qede_tpa_start(), ensuring valid pages are correctly tracked and
recycled. Additionally, update the stale comment for
struct qede_agg_info::buffer to reflect its current usage.
📍 영향받는 시스템
Linux kernel (qede driver 포함 버전)
⚔️ 공격 벡터
메모리 압박을 유도하여 드라이버의 오류를 트리거하는 방식 (Local/Denial of Service)
🛡️ 대응 방법
qede_tpa_start() 함수 내 tpa_info->buffer.data 할당 로직을 복구한 최신 커널로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.