蔡秀吉 Hsiu-Chi Tsai

Open Source

上游系統工程

我沿著系統不變量追查資源會計、生命週期與並行錯誤,建立可重現的失效案例與回歸測試,並把修正送進 Kubernetes、OpenTelemetry、Kueue 與其他上游專案。

CNCF Ambassador · Kubernetes GitHub Org Member · Nephio (LFN) TSC Member · OpenTelemetry GitHub Org Member · Zephyr M5Stack Platforms Maintainer

同一套不變量方法,目前已追出四條跨專案/跨路徑的缺陷家族,每條都可點進完整變體分析:

  1. 資源會計 int64 溢位 Kubernetes · Kueue · Volcano · KAI-Scheduler · CDI · KEDA 9 變體 · 8 merged
  2. DRA 跨廠商 result 守衛 NVIDIA · Intel · IBM · AMD · Google 8 driver · 7 org
  3. NTN SIB19 路徑交易性 OCUDU(srsRAN 後繼) 12 缺陷
  4. Kueue 配額會計驗證 kubernetes-sigs/kueue 7 缺陷
Merged
259 PRs
Upstreams
75 projects
End to end
63 found & fixed
Foundations
7

Representative campaigns

三條代表工作

不是逐個修 bug,而是從一個缺陷抽象出審查不變量,跨專案追蹤同一失效模式,再把每個修正一路推到上游合併並附回歸測試。

01 · Resource accounting

跨專案追蹤資源會計不變量

從 Kubernetes DRA 的一個 int64 溢位出發,把根因抽象成可重用的審查不變量(加總、乘法、型別轉換不得溢位/截斷/漏算/重複扣款),再檢查 Kueue、KAI-Scheduler、Volcano、CDI 等實作。

Failure class
溢位、截斷、漏算、重複扣款、型別邊界
Method
不變量提取、邊界構造、跨專案 variant search
Outcome
9 變體、6 上游、8 修正合併
Evidence
每項附 issue、patch 與失效路徑回歸測試

Representative evidence

  1. kubernetes/kubernetes #140442拒絕無法表示的 consumable-capacity 請求(int64 溢位)
  2. kubernetes/kubernetes #140666擋掉無法使用的 validRange(除零)
  3. kueue #12897拒絕加總會溢位 int64 的 device counts
閱讀完整變體分析 →

02 · Async lifecycle

OpenTelemetry C++ 的非同步生命週期

按「失效契約」而非逐 PR 整理匯出路徑的正確性:連線生命週期(erase 後仍存取 → use-after-free)、完成同步(lost/spurious wakeup)、終端事件契約(一個 operation 被結算 0 次或 2 次)。

Failure class
use-after-free、lost wakeup、重複/零結算
Method
契約定義、失效路徑構造、race 下重現
Outcome
多筆由 maintainer 合併、含 race 回歸測試
Evidence
每項附最小重現與契約測試

Representative evidence

  1. opentelemetry-cpp #4289HttpServer 於連線關閉後仍寫 response(use-after-free)
  2. opentelemetry-cpp #4298ES exporter 無述詞等待致 lost-wakeup 永久阻塞
  3. opentelemetry-cpp #4363curl client 讓每次操作恰結算一次
看 opentelemetry-cpp 合併紀錄 →

03 · NTN transactionality

OCUDU NTN SIB19 更新路徑的交易性

把 NTN SIB19 更新視為一筆交易、而不是十個孤立 bug:coroutine 非持有 reference/span、bounded queue 背壓、部分提交無 rollback、忽略失敗回傳、環狀時間邊界、SI assembler 狀態失同步。

Failure class
懸空 reference、背壓、無回滾、忽略回傳、時間邊界
Method
以「單筆交易」重述整條更新路徑
Outcome
11 缺陷分五類、修正 MR 陸續合併
Evidence
含幾何邊界 sweep 與跨最佳化等級測試

Representative evidence

  1. ocudu !1097 (GitLab)eci_to_orbitalacos 引數浮點越界 → NaN 汙染整組軌道要素
  2. ocudu !1045R17 kmac-r17 CLI 邊界驗證(自報自修)
  3. ocudu !1047R17 taCommon 邊界驗證(自報自修)
閱讀完整 NTN 稽核 →

Coordinated remediation

一個遠端 DoS,從根因修到整個相依圖

insomniacslk/dhcpnclient4 找到一個遠端可觸發的 DoS:修好根因、補上回歸與 hardening、向 Go 漏洞資料庫提報,並把修復沿相依圖推進到下游。

  1. Found · 遠端可觸發 DoS

    BroadcastRawUDPConn.ReadFrom 計算 DHCP payload 長度時,沒先確認 IPv4 payload 裝得下 8-byte UDP 標頭;畸形短 frame 會算出負長度、進到 slice 操作而 panic。任何走預設 broadcast/raw 路徑的 DHCP client 都打得到。

  2. Root fix · PR #583 merged

    IPv4 payload 長度不足以容納 UDP 標頭時直接拒收(ipPayloadLen < udpHdrLen 先 continue)。merge commit c76316d4、2026-07-19。

  3. Regression + hardening in review

    #588 為該路徑加 fuzz target 防回歸;#589 在回傳 DHCP payload 前先驗 UDP length,補上 sibling path。

  4. Reported · golang/vulndb #6237 triaged · high-priority

    向 Go 安全團隊正式提報。high-priority 是 Go vulndb 的工作流優先級(=需要一份 reviewed report),不是 CVSS 嚴重度。

  5. Advisory · GO-2026-6237 published · 2026-08-18

    Go 安全團隊的 REVIEWED 報告已合併進 vulndb(CL 816561 landed、#6237 已關,commit cc7648d)。2026-08-18 已正式發佈vuln.go.dev/ID/GO-2026-6237.jsonpkg.go.dev/vuln/GO-2026-6237 現在都查得到。仍不是 CVE(OSV aliases 為空)。advisory 的 credits 欄目前也是空的,具名請求 golang/vulndb#6251 還開著。

  6. Downstream propagation · 8 merged

    #583 的修復 bump 進相依此函式庫的專案,8 個都已合併。

狀態截至 2026-08-25。GO-2026-6237 已於 2026-08-18 發佈,vuln.go.devpkg.go.dev 皆可查詢;仍不是 CVEaliases 為空)。根因修復 #583 已 merged,下游已 merged 8 筆。advisory 的 credits 欄仍為空,具名請求 golang/vulndb#6251 仍開著。

Selected upstream work

代表貢獻

依讀者要理解的「問題領域」整理,而非 repo 所屬基金會(基金會分布見 Ledger)。每筆都可點進上游查證;完整 259 筆在 Ledger。

資源會計與排程

拒絕無法表示的 consumable-capacity 請求

避免不可滿足的裝置被錯誤判定為可配置(int64 溢位)。

✓ Merged

拒絕加總溢位 int64 的 device counts

配額會計 int64 溢位加固,含 count==1 進位測試。

✓ Merged

並行與生命週期

正在被逐出的 slice 不得當 chain 的 active slice

否則 ungater 依正在釋放的容量放行過多 pod。

✓ Merged

HttpServer use-after-free

連線關閉銷毀後仍寫 response、對已關 socket 送資料。

✓ Merged

ES exporter lost-wakeup 永久阻塞

無述詞 cv_.wait,通知早於 parking 即遺失;改鎖內記狀態+述詞等待。

✓ Merged

跨 driver 與 API 穩定

多 driver ResourceClaim 的 result 守衛

只處理自家 driver 的 result,補回官方 example-driver 本有的守衛。

✓ Merged

workload-slice 相容路徑套用 priority-class 變更

相容分支提早 return、略過唯一套用優先權處,改為也套用(Closes #13778)。

✓ Merged

電信與交付

NTN eci_to_orbital 的 acos NaN 汙染

浮點越界使 acos 回 NaN、汙染整組軌道要素與 SIB19 ephemeris;三處 clamp。

✓ Merged

curl client 每次操作恰結算一次

response 抵達後才 cancel 時,避免 export 被結算兩次。

✓ Merged

手動 cherry-pick 至 release-0.18

自動 CP 衝突後手改適配,把修正安全帶回發布分支。

✓ Merged

Under review

進行中重點

目前最重要的幾筆在審查中工作;完整即時清單見 LedgerGitHub

狀態最後核對: