🇰🇷 한글 설명
Linux 커널의 net: tls 구성 요소에서 오프로드 RX 설정 실패 시 strparser 앵커 skb가 해제되지 않는 메모리 누수 취약점이 발견되었습니다. tls_set_device_offload_rx() 함수가 실패할 때 할당된 skb를 적절히 해제하지 않아 시스템 자원이 지속적으로 소모될 수 있습니다.
💡 쉬운 설명
네트워크 보안 기능을 설정하다가 오류가 발생하면, 컴퓨터가 사용했던 메모리를 다시 돌려주지 않고 계속 붙잡고 있는 문제입니다. 이 현상이 반복되면 컴퓨터의 메모리가 부족해져 시스템 성능이 떨어지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: tls: fix strparser anchor skb leak on offload RX setup failure
When tls_set_device_offload_rx() fails at tls_dev_add(), the error path
calls tls_sw_free_resources_rx() to clean up the SW context that was
initialized by tls_set_sw_offload(). This function calls
tls_sw_release_resources_rx() (which stops the strparser via
tls_strp_stop()) and tls_sw_free_ctx_rx() (which kfrees the context),
but never frees the anchor skb that was allocated by alloc_skb(0) in
tls_strp_init().
Note that tls_sw_free_resources_rx() is exclusively used for this
"failed to start offload" code path, there's no other caller.
The leak did not exist before commit 84c61fe1a75b ("tls: rx: do not use
the standard strparser"), because the standard strparser doesn't try
to pre-allocate an skb.
The normal close path in tls_sk_proto_close() handles cleanup by calling
tls_sw_strparser_done() (which calls tls_strp_done()) after dropping
the socket lock, because tls_strp_done() does cancel_work_sync() and
the strparser work handler takes the socket lock.
📍 영향받는 시스템
Linux kernel (commit 84c61fe1a75b 이후 버전)
⚔️ 공격 벡터
네트워크 오프로드 설정을 의도적으로 실패하게 유도하여 메모리 누수를 발생시키는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
커널 버전을 확인하고 해당 취약점이 수정된 커밋 내역이 포함되어 있는지 확인합니다.
uname -r && git log --grep="tls: rx: do not use the standard strparser"