🇰🇷 한글 설명
Linux 커널의 padata 모듈에서 divide-by-zero 패닉이 발생할 수 있는 취약점입니다. padata_mt_helper() 함수가 chunk_size가 0일 때 나누기 연산을 수행하면서 커널 패닉이 발생합니다. 이는 초기화 시 min_chunk 값이 0일 때 발생할 수 있습니다.
💡 쉬운 설명
Linux 시스템이 데이터를 여러 덩어리로 나누어 처리할 때, 덩어리 크기가 0으로 설정되면 0으로 나누려고 시도해서 시스템이 충돌합니다. 이 문제는 부팅 중에 드물게 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
padata: Fix possible divide-by-0 panic in padata_mt_helper()
We are hit with a not easily reproducible divide-by-0 panic in padata.c at
bootup time.
[ 10.017908] Oops: divide error: 0000 1 PREEMPT SMP NOPTI
[ 10.017908] CPU: 26 PID: 2627 Comm: kworker/u1666:1 Not tainted 6.10.0-15.el10.x86_64 #1
[ 10.017908] Hardware name: Lenovo ThinkSystem SR950 [7X12CTO1WW]/[7X12CTO1WW], BIOS [PSE140J-2.30] 07/20/2021
[ 10.017908] Workqueue: events_unbound padata_mt_helper
[ 10.017908] RIP: 0010:padata_mt_helper+0x39/0xb0
:
[ 10.017963] Call Trace:
[ 10.017968] <TASK>
[ 10.018004] ? padata_mt_helper+0x39/0xb0
[ 10.018084] process_one_work+0x174/0x330
[ 10.018093] worker_thread+0x266/0x3a0
[ 10.018111] kthread+0xcf/0x100
[ 10.018124] ret_from_fork+0x31/0x50
[ 10.018138] ret_from_fork_asm+0x1a/0x30
[ 10.018147] </TASK>
Looking at the padata_mt_helper() function, the only way a divide-by-0
panic can happen is when ps->chunk_size is 0. The way that chunk_size is
initialized in padata_do_multithreaded(), chunk_size can be 0 when the
min_chunk in the passed-in padata_mt_job structure is 0.
Fix this divide-by-0 panic by making sure that chunk_size will be at least
1 no matter what the input parameters are.
📍 영향받는 시스템
Linux kernel 6.10.0 및 이후 버전 (특히 RHEL/CentOS 계열 배포판)
⚔️ 공격 벡터
로컬 DoS - 특정 padata 구성으로 인한 자동 트리거 또는 부팅 시 의도적 시스템 종료
🛡️ 대응 방법
Linux kernel 패치 적용 또는 최신 커널 버전으로 업그레이드 (chunk_size를 최소 1로 보장하도록 수정된 버전)
🔧 검증 코드
kernel version이 출력되면 잠재적으로 영향받는 버전입니다. 실제 패치 여부는 커널 설정에 따라 달라지므로 /proc/version 확인 권장.
uname -r | grep -E '6\.(10|[1-9][0-9])\.0'