sue@blog ~ /posts/macos-kernel-panic-iphone-tethering
Engineer
Business
$ cd ../ 記事一覧に戻る
Business Mode — 技術的な詳細を省略し、全体の流れと「何をすればいいか」に集中した表示です。右上のトグルでEngineerモードに切り替えられます。
$ cat post.metadata

iPhoneをUSB-Cでテザリングしていたら、Macが目の前で再起動した

date: 2026-07-17 カーネルパニック macOS iPhone Troubleshooting
iPhoneをUSB-Cテザリング中にMacが突然カーネルパニックで再起動。panicログを読み解いて原因を特定するまでの記録と、効く順に並べた5つの対策。

💡 ひとことで言うと
iPhoneをUSB-Cケーブルでテザリングしていたら、Macが突然カーネルパニック(システム全体の異常停止)を起こして再起動したという話です。

残されたログを1行ずつ読み解き、「直前に読み込まれていた部品」から犯人を特定するまでの記録です。専門知識がなくても追える調査の手順として読めます。

作業中、前触れもなく画面が暗転し、Macが再起動しました。重い処理をしていたわけでも、変なアプリを立ち上げたわけでもありません。していたのは、iPhoneをUSB-Cケーブルでつないでテザリングしていた、それだけです。

再起動後、/Library/Logs/DiagnosticReports/ にカーネルパニックのログが残っていました。この記事は、そのログを読み解いて原因を特定するまでの記録です。

対象読者

📋 ざっくり言うと、起きたことはこの3つ
  1. iPhoneをUSB-Cケーブルでテザリングしていたら、Macがシステムごと落ちて再起動した
  2. 残されたログの1行目に「安全のためにOSが自分で処理を止めた」という意味の記録があった
  3. ログの最後にあった「直前に読み込まれた部品名」が、iPhoneのUSBテザリング専用の部品だった

症状:ログに残っていた1行目

パニックログの冒頭はこうでした。

panic log
panic(cpu 1 caller 0xfffffe0051333c60): m_copym_with_hdrs n 0xfffffe2ea3978000 copy overflow @uipc_mbuf.c:3268

暗号のような文字列ですが、分解すると読めます。

uipc_mbuf.c は macOS のカーネル(XNU)の中でも、mbuf(ネットワークパケットを格納するメモリバッファのチェーン構造)を扱うファイルです。m_copym_with_hdrs はそのmbufチェーンをヘッダーごとコピーする関数。つまりこのパニックは、アプリではなくOSの中核、ネットワーク通信を処理している最中に起きています。

copy overflow は、mbufチェーンが「自分の長さはこれです」と申告している値と、実際にチェーンが持っているバッファの容量が食い違い、コピー処理がバッファの境界を超えて書き込もうとしたことを検知した、という意味です。

これは「たまたま落ちた」のではありません。そのままコピーを続けるとメモリ破壊が起きると判断して、カーネルが被害が広がる前に自分で処理を止めた、という話です。Appleは近年このあたりの経路に境界チェックを強化していて、以前ならサイレントな破損として見過ごされていたかもしれない異常を、明示的なpanicとして表面化させています。
🚨 「パニック」とは何か
OSの内部には、ネットワーク通信のデータを一時的に置いておく「小箱」の列があります。この小箱の列は「自分の合計サイズはこれです」と自己申告するルールになっています。

今回、申告サイズと実際の小箱の容量が食い違い、OSがコピー作業を続けると小箱の外にデータがあふれる(=メモリ破壊)ことを検知しました。

OSは「あふれる前に、自分から止まる」という安全策を取りました。クラッシュは事故ではなく、被害拡大を防ぐための意図的な自己停止です。

手がかりはログの最後にあった

パニックの直接の原因(どのパケット・どの通信だったか)はログからは分かりません。ですが、末尾にこんな一行がありました。

panic log(末尾)
last started kext at 2540700876106: com.apple.driver.usb.cdc.ncm    5.0.0

com.apple.driver.usb.cdc.ncm は、iPhoneをUSBケーブルでテザリングしたときに、Macがそのイーサネット通信をエミュレートするために使うドライバです。パニック直前にロードされたkextがこれでした。

もちろん「直前にロードされた」=「原因」と即断はできません。単なる相関の可能性もあります。ただ、この時点で「もしかして」という当たりはつきました。

🔍 「直前にロードされた部品」とは
OSは、外部機器を接続するたびに専用の小さなドライバ(部品)を読み込みます。今回パニックの直前に読み込まれていた部品は、iPhoneをケーブルでつないでネット共有するときだけ使う専用部品でした。

「直前に読み込まれた=犯人」と決めつけるのは早計です。ただし強い手がかりではあります。

答え合わせ

そのときの状況を思い出すと——していました。iPhoneをUSB-Cケーブルでつないでテザリングしていました。

ログに残っていた物的証拠(usb.cdc.ncm の直前ロード)と、実際にしていたこと(USB-Cテザリング)が一致し、原因はほぼ確定しました。iPhoneのUSBテザリング経由でネットワーク通信が流れていた最中に、mbufチェーンの長さ計算が壊れ、カーネルがoverflowを検知して安全側に倒した、という流れです。

体感 → ログ → 状況の一致という順で答え合わせをする。ログだけで断定せず、実際の行動と突き合わせて初めて確度が上がります。

実は「あるある」だった

調べてみると、iPhoneのUSBテザリングによるmacOSのカーネルパニックは、2010年代から続く息の長い既知カテゴリでした。

もう少し広く「ネットワークスタックの深い所で起きるカーネルパニック」というくくりで見ると、VPNやセキュリティソフトのようにパケット処理に割り込むソフトウェアが、通信負荷の高い状況で似た系統のパニックを起こす例も見つかりました。

共通しているのは、ネットワークスタックの深い所に割り込む経路(VPN・ファイアウォール・サードパーティNICドライバ・USBネットワークアダプタ)が、通信負荷が高い状況で潜在バグを踏むというパターンです。USBテザリングもまさにこの経路の一つでした。最新のmacOSでも、この種の不具合は根絶されていないようです。

📚 「あるある」だと分かる意味
自分だけの珍しい故障だと思っていたものが、10年以上前から報告され続けている既知の不具合カテゴリだと分かりました。

これが分かると、対応の優先順位が変わります。「自分の環境が特殊だから」ではなく「この経路自体が弱い」と分かれば、根本解決を待つより先に回避策と付き合う判断がしやすくなります。

対策:効く順に

  1. ケーブルを疑う — 認証済みのUSB-Cケーブルか確認する。劣化したケーブルは通信中に瞬断しやすく、それが引き金になりやすい
  2. Wi-Fiテザリングに一旦切り替える — USB経路を経由しなければ cdc.ncm は関与しないので、有力な切り分けになる。トレードオフとして通信は多少不安定・低速になりうる
  3. iOS / macOS のアップデートを確認する — CDC-NCM周りの不具合はどちらかのアップデートで直ることがある
  4. 再発したら sudo sysdiagnose をテザリング直後に取っておく — 今回のログは冒頭部分しか手元になかったが、フルの sysdiagnose にはもっと詳細な情報(プロセス名やネットワークの状態)が残る
  5. 再現性が高ければ Apple Feedback Assistant に報告する — 再現手順があるレポートは特に価値が高い

この調査から持ち帰るもの

最後にひとこと

「よく分からないから再起動して様子を見る」で終わらせず、残されたログを1行ずつ読むだけで、専門家でなくても当たりをつけるところまでは辿り着けます。今回の決め手も、複雑な解析ではなく「直前に何が読み込まれたか」という1行でした。

Related Posts

$ _