🇰🇷 한글 설명
Linux 커널의 NFC s3fwrn5 UART 드라이버에서 수신 버퍼 할당이 실패했을 때 이미 소비된 바이트를 정상으로 반환하면서 버퍼를 NULL로 남겨두어 다음 skb_put_u8() 호출 시 NULL 역참조 오류를 유발하는 메모리 관리 취약점입니다. 고정은 수신 데이터를 바이트 단위로 처리하기 전에 버퍼를 선할당하는 방식으로 변경합니다.
💡 쉬운 설명
Linux 커널의 NFC 칩 드라이버가 메모리 할당에 실패했을 때 데이터를 제대로 정리하지 못해 시스템이 충돌할 수 있는 결함입니다. NFC 기기를 사용하는 임베디드 시스템에서 국지적 서비스 거부 공격이 가능합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfc: s3fwrn5: allocate rx skb before consuming bytes
s3fwrn82_uart_read() reports the number of accepted bytes to the serdev
core. The current code consumes bytes into recv_skb and may already
deliver a complete frame before allocating a fresh receive buffer.
If that alloc_skb() fails, the callback returns 0 even though it has
already consumed bytes, and it leaves recv_skb as NULL for the next
receive callback. That breaks the receive_buf() accounting contract and
can also lead to a NULL dereference on the next skb_put_u8().
Allocate the receive skb lazily before consuming the next byte instead.
If allocation fails, return the number of bytes already accepted.
📍 영향받는 시스템
Linux kernel with s3fwrn5/s3fwrn82 NFC UART driver (embedded/ARM systems with NFC capability)
⚔️ 공격 벡터
Local exploitation via malformed NFC UART communication or device triggering buffer allocation failure during receive callback
🛡️ 대응 방법
Update Linux kernel to patched version or apply backport for s3fwrn82_uart_read() function lazy allocation fix
🔧 검증 코드
s3fwrn5 드라이버 존재 여부와 커널 버전을 확인하여 패치 적용 여부를 판단합니다. 드라이버가 없거나 최신 커널 버전이면 안전합니다.
grep -r 's3fwrn5' /lib/modules/$(uname -r)/ 2>/dev/null | head -1 && uname -r