← All issues

WGSL Uniformity Analysis Compiler Pass

b7f96d9

WGSL에서 "uniformity"는 subgroup 또는 workgroup 내 모든 invocation에 걸쳐 값이나 control flow 경로가 동일하다는 성질을 의미합니다. textureSample, workgroupBarrier, workgroupUniformLoad 같은 일부 내장 함수는 uniform한 인수를 요구합니다. @builtin(global_invocation_id) 같은 per-invocation 값으로 분기된 경로 안에서 이 함수들이 non-uniform하게 호출되면, GPU 드라이버 동작은 undefined 상태가 됩니다. 일부 하드웨어에서는 이 상황이 information leak이나 crash로 이어질 가능성이 있습니다. WGSL 명세(15.2.3절)에 따르면 uniformity analysis는 shader 컴파일 시점에 반드시 수행해야 하는 정적 검사입니다.

이 commit은 Source/WebGPU/WGSL/UniformityAnalysis.cpp에 새로운 UniformityAnalysis compiler pass를 도입했습니다. 먼저 control flow graph를 구성하고, dataflow propagation을 통해 각 AST 노드의 "behavior set"을 추적합니다. Behavior set은 각 값과 control flow 전이가 uniform인지 non-uniform인지를 나타냅니다. non-uniform context에서 uniformity를 요구하는 내장 함수를 호출하는 shader는 거부합니다. type-checking 이후 실행되는 기존 staticCheck pipeline에 연결되었습니다.

WGSL shader source
        │
        ▼
   Parser / AST → TypeChecker::analyze()
        │
        └──► [NEW] UniformityAnalysis   ← builds CFG, propagates behavior sets
                        │
                        ▼ (reject on violation)
             Metal code generation

uniformity 검증이 없는 상태에서는 uniformity 제약을 위반하는 shader가 아무런 오류 없이 통과되고 있었습니다. 그 결과 conformance test suite(webgpu:shader,validation,uniformity,uniformity:*)가 실패하는 상황이었습니다. 이 pass는 해당 공백을 해소하며, 안전성이 중요한 영역에서 WebKit의 WGSL 구현을 명세에 부합하게 만듭니다. GPU 보안 관점에서 이 validator는 드라이버 수준의 undefined behavior를 차단하는 방어선에 해당합니다.

🔒

이 취약점 패턴의 변종을 찾기 위한 구체적인 탐색 방향이 포함되어 있습니다

더 확인하려면 구독해 주세요