Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ dump/harness/skill-lock.json text eol=lf
# checkout needs a forced re-checkout, because git skips stat-clean paths (see
# ADR 0050). Same shape as the *.sh pin above.
*.go text eol=lf
# CA doctor embeds these bytes for stale-binary detection across host OSes.
# The doctor tools embed these bytes and compare them against the working
# tree, so they must be LF on every OS or a CRLF checkout reports a stale
# binary for an unchanged commit.
tools/ca-doctor/go.mod text eol=lf
tools/ca-doctor/incidents/*.json text eol=lf
tools/kernel-doctor/go.mod text eol=lf
tools/kernel-doctor/incidents/*.json text eol=lf
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ tools/simple-server/simple-server
tools/simple-server/simple-server.exe
/output/ca-doctor/
/output/brotli-doctor/
/output/kernel-doctor/

# Stray `bunx skills` output. The CLI's real lock is ~/.agents/.skill-lock.json
# in the agent home (dot-prefixed, singular); running the CLI from the repo root
Expand Down
98 changes: 98 additions & 0 deletions docs/adr/0065-kernel-cve-is-evidence-only.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# 0065. Linux カーネルの CVE は dotfiles が直さず、報告と助言だけを行う

**Date:** 2026-10-29
**Status:** Proposed(決裁待ち。[decision-queue](../decision-queue.md) で追跡する)
**ID:** ADR-0065
**Title:** Linux カーネルの CVE は dotfiles が直さず、報告と助言だけを行う
**Decided-date:** (未決)
**Decision-maker:** Hiroto N.
**Decision-maker-contact:** @hironow
**Author:** Pi(owner session)
**Author-contact:** @hironow
**Supersedes:** none
**Superseded-by:** none
**Related:** [ADR-0058](0058-pi-web-search-ollama.md)、[ADR-0064](0064-mirrored-wsl-uses-the-shared-loopback.md)、[ADR-0035](0035-runner-disk-gc.md)
**Consultation-trace:** 2026-10-29 の本セッションで所有者が選んだ — (1) 対応の深さは runbook + `just doctor` の advisory 検査 + Go の `kernel-doctor`、(2) 記録は ADR + decision-queue 行、(3) WSL カーネルを管理しない方針は維持し、runbook に operator 手順として書く

## やさしい説明

Linux カーネルの脆弱性(CVE-2026-98432)への対応を、このリポジトリで行った。
この dotfiles はカーネルそのものを持っていないので、**直すことはできない**。
カーネルを入れているのは Microsoft(WSL)やディストロ、OrbStack や Docker Desktop である。

だからやったのは 3 つ。どのカーネルが露出しているかを調べる `kernel-doctor` を足した。
`just doctor` に助言として組み込んだ。そして直し方を runbook に書いた。
**「脆弱」とも「安全」とも言わない。** 版と、レビュー済みの修正版を比べた結果だけを言う。

## Context

2026-10-15 に CVE-2026-98432(`ipv4: free inet_opt and ireq_opt after an RCU grace period`)が公開された。
CNA は kernel.org。導入は 2015 年の commit `079096f103fa`(v4.4 期)で、修正は
`inet_sock_destruct()` と `tcp_v4_reqsk_destructor()` の `kfree()` を `kfree_rcu()` にするもの。
レビュー済みの上流修正版は 5.10.272 / 5.15.223 / 6.1.190 / 6.6.159 / 6.12.113 / 6.18.56 / 7.2.10、
mainline は 7.3(2026-10-29 時点)。

深刻度には争いがある。NVD / Tenable / Rapid7 は `CVSS:3.1/AV:N/AC:L/PR:N/UI:N` = 9.8 だが、
Oracle の自社記録は暫定と明記したうえで `AC:H` = 8.1、Red Hat の優先度は critical ではなく high
(Bugzilla は `NEW`、修正版は未確定)。EPSS は 0.00388、CISA KEV 未収載。

**このリポジトリは Linux カーネルを同梱・ビルド・固定していない**(ツリーを検索して確認)。
露出は 4 面あるが、いずれもカーネルは他者の管理下にある。

| 面 | カーネルの供給元 | dotfiles の管轄 |
| --- | --- | --- |
| macOS ホスト | Apple | 対象外 |
| WSL2 と self-hosted runner | Microsoft(`wsl --update`) | なし |
| devcontainer / emulator / telemetry のコンテナ | ホスト VM / WSL2 を共有 | なし |

WSL のカーネルを管理しないのは既存の方針である。ADR-0058 の Context と ADR-0064 は
「dotfiles は `.wslconfig` を変えない」と明記し、`config/wsl/wslconfig` は推奨テンプレート、
`just wslconfig` は差分表示のみで自己適用しない。`just wsl-conf` が扱うのは
`/etc/wsl.conf` の interop / systemd キーであって、カーネルではない。

前例は `tools/ca-doctor` と `tools/brotli-doctor` である。どちらも「証拠であって判定ではない」
規律(明示的な `unverified`、レビュー日と期限、冪等な再実行)を持ち、`just doctor` に advisory として入る。

## Decision

1. **dotfiles は Linux カーネルを同梱・ビルド・固定・更新しない。** 現状を明示的な決定として固定する。
カーネルの是正は operator が各供給元(Microsoft / ディストロ / OrbStack・Docker Desktop)で行う。
2. **カーネルの CVE は「報告と助言」に留める。** `tools/kernel-doctor`(Go、stdlib のみ)が
実行中または報告されたカーネル版をレビュー済みの出典つき修正床と突き合わせ、
`just doctor` が advisory として表示し、`docs/runbook/kernel-doctor.md` が面ごとの手順を示す。
3. **ベンダー/ディストロのカーネルは判定しない。** 比較は文字列**全体**がクリーンな上流リリース形
`x.y.z` で、かつ `major.minor` がレビュー済み branch のときだけ行う。それ以外
(ベンダーの ABI サフィックス、未収載 branch、`+` や `.N` 付き)は `unverified` とし、
レビュー済み修正床の一覧を出す。**未判定を「修正済み」として数えない。**
理由: Ubuntu `6.8.0-45-generic` や Debian `6.1.0-28-amd64` の第 3 成分は上流の patch level ではなく、
数値比較は両方向に間違える。
4. **kernel-doctor の所見は doctor の `err` に入れない(WARN 止まり)。** `just doctor` の exit 1 は
`just self-check` と `test_doctor_sandbox` を赤くする。カーネルはこのリポジトリが直せないので、
operator がリポジトリ外でしか直せない条件で repo の gate を赤くしない。ツールの自己申告に頼らず、
`scripts/doctor.sh` の側で ERR を単一の WARN に落とす。前例は `win-machine-path`。
5. **WSL カーネルと `.wslconfig` を管理しない方針を維持する。** 是正手順
(Windows 側で `wsl --update` → `wsl --shutdown` → `uname -r` で確認、runner の
アイドル時に行う)は runbook に operator 手順として書く。ADR-0058 と ADR-0064 は変更しない。

## Consequences

### Positive

- カーネルの CVE が来ても、repo が担う範囲(検出・助言・記録)と担わない範囲(是正)が明示される。
- 誤判定しない。ベンダーカーネルを数値で比べて「脆弱」「修正済み」と言う事故が構造的に起きない。
- `just doctor` の exit 契約が守られる。直せないものを赤にしないので、gate が意味を保つ。
- 記録にレビュー期限があるので、一次情報が古くなったことが表面化する。

### Negative

- ベンダーカーネルの実際の修正状態は分からないままである。operator が各勧告を読む必要がある。
- レビュー済み branch のあいだの branch(例: 6.13〜6.18)は `unverified-branch` になり、
判定が出ない。保守側に倒れる分、情報量は少ない。
- 記録を人手で更新し続ける必要がある(期限切れは WARN で出るが、更新は自動ではない)。

### Neutral

- `kernel-doctor` は CVE が 1 件のうちは薄い道具である。汎用の脆弱性スキャナにはしない。
- クロスビルドできることは、Windows / WSL の実機で観測できたことの証明ではない。
- `tools/kernel-doctor/` は `tools/ca-doctor/` と同じ形(`incidents/*.json`、`//go:embed` と
バイト比較によるビルド鮮度検査)を取るので、保守の作法は既存の 2 つと揃う。
2 changes: 2 additions & 0 deletions docs/adr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ and what outlived it.
| 0062 | [共存機の Ollama は Windows の Scoop ollama-full に 1 台だけ置き、WSL はクライアントにする](./0062-one-windows-ollama-for-wsl.md) | Accepted; partly supersedes [0058](./0058-pi-web-search-ollama.md) | 2026-10-25 | `scripts/ollama_host.py`、`scripts/install_pi_extensions.py`、`docs/runbook/ollama-windows-wsl.md` |
| 0063 | [宣言した機体だけ、tailnet の中だけの Tailscale 転送を Ollama の公開と数えない](./0063-declared-tailnet-forward-of-ollama.md) | Accepted | 2026-10-25 | `scripts/ollama_host.py`、`tests/unit/test_ollama_host.py`、`.github/workflows/unit-test.yaml`、`docs/runbook/ollama-windows-wsl.md` |
| 0064 | [mirrored の WSL にはブリッジを置かず、共有の loopback で Windows の Ollama を使う](./0064-mirrored-wsl-uses-the-shared-loopback.md) | Accepted | 2026-10-25 | `scripts/ollama_host.py`、`tests/unit/test_ollama_host.py`、`docs/runbook/ollama-windows-wsl.md` |
| 0065 | [Linux カーネルの CVE は dotfiles が直さず、報告と助言だけを行う](./0065-kernel-cve-is-evidence-only.md) | Proposed(決裁待ち) | 2026-10-29 | `tools/kernel-doctor/`、`justfile`、`scripts/doctor.sh`、`tests/unit/test_doctor_kernel.py`、`docs/runbook/kernel-doctor.md` |

## Reading order for newcomers

Expand Down Expand Up @@ -143,3 +144,4 @@ and what outlived it.
共存機の Ollama は Windows の Scoop `extras/ollama-full` に 1 台だけ置き、WSL はクライアントにする(PR #502 の実装の記録)。DR 間整合検査で検出した矛盾を所有者が裁定した。
- 2026-10-25: [ADR-0063](./0063-declared-tailnet-forward-of-ollama.md)を採択。宣言した機体だけ、tailnet の中だけの Tailscale 転送を、厳しい条件で Ollama の公開と数えない。Funnel は認めない。
- 2026-10-25: [ADR-0064](./0064-mirrored-wsl-uses-the-shared-loopback.md)を採択。mirrored の WSL にはブリッジを置かず、共有の loopback で Windows の Ollama を使い、doctor が接続の前に持ち主を確かめる。
- 2026-10-29: [ADR-0065](./0065-kernel-cve-is-evidence-only.md)を起票(Proposed、決裁待ち)。CVE-2026-98432(Linux カーネル IPv4 TCP の use-after-free)を契機に、カーネルは dotfiles が直さないこと、版の比較はクリーンな上流形かつレビュー済み branch のときだけ行い未判定を修正済みと数えないこと、kernel-doctor の所見は doctor の `err` に入れないこと、WSL カーネルを管理しない方針(0058 / 0064)を維持することを定める。
3 changes: 2 additions & 1 deletion docs/decision-queue.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
## 早見表(決裁待ち)

| ID | 何を決める(ひとことで) | 種別 | 作者 | 作者連絡先 | 決める人 | 決裁者連絡先 | 期限 | 状態 | 相談記録 | 最終催促日 | 備考 | 元ファイル |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| ADR-0065 | Linux カーネルの CVE は dotfiles が直さず、報告と助言だけを行う | ADR | Pi(owner session) | @hironow | Hiroto N. | @hironow | — | 決裁待ち | 2026-10-29 の本セッションで所有者が選択(深さ = runbook + `just doctor` の advisory + Go の `kernel-doctor`、記録 = ADR + 本行、WSL 方針 = 維持) | — | 独立レビュー(Codex 0.164.0)は REVISE、8 指摘を全件実測確認して反映済み。`just doctor` の exit 契約を守るため kernel の所見は `err` に入れない | [docs/adr/0065-kernel-cve-is-evidence-only.md](adr/0065-kernel-cve-is-evidence-only.md) | --- |

## 決定済みログ

Expand Down
Loading
Loading