🇰🇷 한글 설명
Linux 커널의 Microchip VCAP 드라이버에서 여러 인스턴스가 동일한 Super VCAP 하드웨어 블록을 공유할 때 발생하는 레이스 컨디션 취약점입니다. 각 인스턴스가 독립적인 잠금(lock)을 사용하기 때문에, debugfs를 통한 규칙 읽기와 다른 인스턴스의 규칙 쓰기가 동시에 발생할 경우 하드웨어 엔트리가 손상될 수 있습니다.
💡 쉬운 설명
여러 개의 장치가 하나의 통로를 공유하면서 각자 자기만의 열쇠를 사용해 발생하는 충돌 문제입니다. 이로 인해 데이터를 읽고 쓰는 과정에서 서로 엉켜 하드웨어 설정이 망가질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: microchip: vcap: fix races on the shared Super VCAP block
The VCAP instances on a chip are not independent, yet they are locked
independently. On sparx5 and lan969x the IS0 and IS2 instances are
backed by the same Super VCAP hardware block and share its cache and
command registers: every access drives the shared VCAP_SUPER_CTRL
register and moves data through the shared cache registers.
Accessing one instance therefore races with accessing another. The
per-instance admin->lock cannot prevent this, as each instance takes a
different lock.
The locking issue is mostly disguised by the fact that the core usage of
the vcap api runs under rtnl. However, the full rule dump in debugfs
decodes rules straight from hardware (a READ command followed by a cache
read) and runs outside rtnl, so it races a concurrent tc-flower rule
write to another Super VCAP instance.
Besides corrupting the dump, the read repopulates the shared cache
between the writers cache fill and its write command, so the writer
commits the wrong data and corrupts the hardware entry.
Introduce vcap_lock() and vcap_unlock() helpers and route every rule
lock site in the VCAP API and its debugfs code through them. Replace the
per-instance admin->lock with a single mutex in struct vcap_control that
serializes access to all instances. The helpers reach it through a new
admin->vctrl back-pointer, and the clients initialise and destroy the
control lock instead of a per-instance one.
No path holds more than one instance lock, so collapsing them onto a
single mutex cannot self-deadlock.
📍 영향받는 시스템
Linux kernel (sparx5 및 lan969x 하드웨어를 사용하는 환경)
⚔️ 공격 벡터
debugfs를 통한 규칙 읽기 작업과 tc-flower를 통한 규칙 쓰기 작업을 동시에 수행하여 하드웨어 데이터 손상 유도
🛡️ 대응 방법
커널 패치를 통해 인스턴스별 잠금 대신 모든 인스턴스를 통합 관리하는 단일 뮤텍스(vcap_lock)를 적용해야 함
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.