🇰🇷 한글 설명
Linux 커널의 TCP 스택에서 tcp_make_synack() 함수가 프로세스 컨텍스트에서 호출될 수 있게 되었으나, 선점(preemption)이 활성화된 상태에서 per-CPU 변수를 건드리는 문제가 있었습니다. 이로 인해 커널 BUG 경고가 발생할 수 있었으며, __TCP_INC_STATS() 대신 TCP_INC_STATS()를 사용하도록 수정되었습니다.
💡 쉬운 설명
네트워크 연결을 처리하는 리눅스 커널 코드에서 잘못된 방식으로 내부 값을 갱신하던 문제가 있었습니다. 이로 인해 커널이 경고 메시지를 출력하고 불안정해질 수 있었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tcp: tcp_make_synack() can be called from process context
tcp_rtx_synack() now could be called in process context as explained in
0a375c822497 ("tcp: tcp_rtx_synack() can be called from process
context").
tcp_rtx_synack() might call tcp_make_synack(), which will touch per-CPU
variables with preemption enabled. This causes the following BUG:
BUG: using __this_cpu_add() in preemptible [00000000] code: ThriftIO1/5464
caller is tcp_make_synack+0x841/0xac0
Call Trace:
<TASK>
dump_stack_lvl+0x10d/0x1a0
check_preemption_disabled+0x104/0x110
tcp_make_synack+0x841/0xac0
tcp_v6_send_synack+0x5c/0x450
tcp_rtx_synack+0xeb/0x1f0
inet_rtx_syn_ack+0x34/0x60
tcp_check_req+0x3af/0x9e0
tcp_rcv_state_process+0x59b/0x2030
tcp_v6_do_rcv+0x5f5/0x700
release_sock+0x3a/0xf0
tcp_sendmsg+0x33/0x40
____sys_sendmsg+0x2f2/0x490
__sys_sendmsg+0x184/0x230
do_syscall_64+0x3d/0x90
Avoid calling __TCP_INC_STATS() with will touch per-cpu variables. Use
TCP_INC_STATS() which is safe to be called from context switch.
📍 영향받는 시스템
Linux 커널 (수정이 반영되기 전의 해당 버전 및 배포판 커널)
⚔️ 공격 벡터
로컬 또는 네트워크를 통해 대량의 TCP 연결 요청을 유발하여 커널 경고 또는 불안정 상태를 일으킬 수 있음
🛡️ 대응 방법
배포판이 제공하는 최신 커널 보안 업데이트를 적용하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지에서 해당 패치(CVE-2023-53121 수정)가 포함된 버전과 비교하여, 같거나 높으면 수정된 것으로 판단하고 낮으면 업데이트가 필요합니다.