[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

status report



最近のカーネル関係の修正について簡単に報告します。

1. xcontextレジスタが壊れるバグの修正

これはR4000系のCPUを使っているすべてのマシンに影響するバグです。

R4000系のCPU(いわゆるMIPS3のCPUですが、この呼び方は正しくありません)では、
ユーザプロセスのベージテーブルへのポインタをxcontextレジスタの上位32bit
に格納しています。

レジスタに値を設定する関数はlocore_mips3.S:mips3_write_xcontext_upper()
ですが、64bitの演算やレジスタ間転送命令を実行しているにもかかわらず、割
り込みを禁止していませんでした。(割り込み時にはレジスタの内容は32bitしか
保存されません。)

このため、dmtc0命令が割り込みを受け付けると64bitのレジスタの上位32bitが
破壊され、不正な値がxcontextレジスタに書き込まれます。

詳細は未調査ですが、xcontextレジスタに不正な値(おそらく0)が書かれている
と、そのユーザプロセスはsignal 6で異常終了するようです。

再現頻度が非常に低かった(1回/1日程度)ため、原因を絞り混むのに時間がかか
りましたが、ようやく突き止めて修正しました。

2. 「幻の」キーが押される問題の対策

キーボードのハードウェア上の不備によって押されていないキーが検出される問
題を修正しました。影響があるのはVR41xxを使っているマシンです。TXシリーズ
でも同じ問題があるかどうかは調べていません。

篠原