🇰🇷 한글 설명
Linux 커널의 fore200e 드라이버에서 fore200e_open() 함수 호출 중 오류가 발생할 경우, 대역폭을 복구하는 과정에서 락(lock)을 사용하지 않아 데이터 경합(Data Race)이 발생합니다. 이로 인해 여러 프로세스가 동시에 대역폭을 수정할 경우 잘못된 값이 저장되어 대역폭 계산 오류가 발생할 수 있습니다.
💡 쉬운 설명
네트워크 사용량을 기록하는 장부에서 여러 사람이 동시에 수정할 때, 한 사람이 실수로 잠금 장치를 사용하지 않아 기록이 엉망이 되는 문제입니다. 이로 인해 실제 사용 가능한 네트워크 속도가 잘못 계산될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
atm/fore200e: Fix possible data race in fore200e_open()
Protect access to fore200e->available_cell_rate with rate_mtx lock in the
error handling path of fore200e_open() to prevent a data race.
The field fore200e->available_cell_rate is a shared resource used to track
available bandwidth. It is concurrently accessed by fore200e_open(),
fore200e_close(), and fore200e_change_qos().
In fore200e_open(), the lock rate_mtx is correctly held when subtracting
vcc->qos.txtp.max_pcr from available_cell_rate to reserve bandwidth.
However, if the subsequent call to fore200e_activate_vcin() fails, the
function restores the reserved bandwidth by adding back to
available_cell_rate without holding the lock.
This introduces a race condition because available_cell_rate is a global
device resource shared across all VCCs. If the error path in
fore200e_open() executes concurrently with operations like
fore200e_close() or fore200e_change_qos() on other VCCs, a
read-modify-write race occurs.
Specifically, the error path reads the rate without the lock. If another
CPU acquires the lock and modifies the rate (e.g., releasing bandwidth in
fore200e_close()) between this read and the subsequent write, the error
path will overwrite the concurrent update with a stale value. This results
in incorrect bandwidth accounting.
📍 영향받는 시스템
Linux kernel (fore200e driver module)
⚔️ 공격 벡터
로컬 사용자가 특정 네트워크 설정(VCC)을 반복적으로 열고 닫는 과정을 통해 대역폭 자원 관리 로직의 오류를 유도할 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 fore200e_open()의 오류 처리 경로에 rate_mtx 락이 적용되도록 수정해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 확인하십시오.