🇰🇷 한글 설명
Linux 커널 printk 함수의 LOG_BUF_LEN_MAX 정의에서 1 << 31 시프트 연산 시 32비트 signed integer overflow 발생. 1을 u32로 캐스팅하여 unsigned 정수에서 연산을 수행하면 undefined behavior를 방지할 수 있습니다.
💡 쉬운 설명
Linux 커널의 메시지 버퍼 크기 계산에서 매우 큰 숫자를 다룰 때 계산 오류가 발생하는 문제입니다. 커널 패치로 쉽게 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
printk: Fix signed integer overflow when defining LOG_BUF_LEN_MAX
Shifting 1 << 31 on a 32-bit int causes signed integer overflow, which
leads to undefined behavior. To prevent this, cast 1 to u32 before
performing the shift, ensuring well-defined behavior.
This change explicitly avoids any potential overflow by ensuring that
the shift occurs on an unsigned 32-bit integer.
📍 영향받는 시스템
Linux kernel (printk 로깅 시스템을 포함한 모든 버전)
⚔️ 공격 벡터
직접적 공격 벡터 없음 - 커널 내부 연산 오류로 인한 잠재적 crash 또는 unpredictable behavior
🛡️ 대응 방법
Linux 커널 업데이트로 printk.c의 LOG_BUF_LEN_MAX 정의에서 u32 캐스팅 적용된 버전으로 패치
🔧 검증 코드
커널 버전 확인 후 dmesg 로그에서 printk 관련 undefined behavior 오류 없음을 확인
uname -r | grep -E 'kernel|linux' && dmesg | tail -5 | grep -i printk