#カーネルパッチ勉強会

Linuxカーネルパッチについて、ゆたかさんによる一言解説をまとめているものです。 https://twitter.com/yutakakn > Linuxに関する勘所を忘れないようにするため、Linuxカーネルのコミット内容を毎日読むことにしました。
21
前へ 1 2 3 ・・ 12 次へ
平田豊@フォロバ100 @yutakakn

printkの"%pCr"がなくなりそうなので"%lu"に修正されています。そもそもclk_get_rate()はアトミックコンテキスト(カーネルプリエンプション禁止中)で呼び出せないとのことです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-06-21 17:04:36
平田豊@フォロバ100 @yutakakn

printkの"%pCr"というのは"%p"の後に"Cr"を表示するという意味ではなく、"%pCr"でひとつの書式で当然ANSI Cにはないです。 @ lib/vsprintf.c * - 'Cr' For a clock, it prints the current rate of the clock #カーネルパッチ勉強会

2018-06-21 17:15:39
平田豊@フォロバ100 @yutakakn

バイナリファイルを読み込む時、オフセット計算でunsigned longからintに代入しているため、オフセットがオーバーフローしてカーネルクラッシュするという問題修正です。この手のバグもあるあるですね。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-06-26 13:13:30
平田豊@フォロバ100 @yutakakn

vhost_msg構造体のtypeメンバがintなので、64bit環境だと直後のパディングが挟まれ、ゴミが入るという問題の修正ですが、ゴミを参照しなければ問題は顕在化しないですね。この手の問題もあるあるです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-06-26 14:51:44
平田豊@フォロバ100 @yutakakn

下記構造体は32bitと64bit環境では、構造体のサイズが変わるため、64bitカーネル上では32bitアプリの動作は不定です。 struct vhost_msg { int type; union { struct vhost_iotlb_msg iotlb; __u8 padding[64]; }; }; git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-06-27 15:44:20
平田豊@フォロバ100 @yutakakn

ワコムのペンタブレットのHID情報(Y軸論理最大値)が誤っていたので、ドライバ側で修正が入っています。これが俗に言う、「ハードのバグをソフトで直す」例です。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-01 13:52:24
平田豊@フォロバ100 @yutakakn

A*Bという計算でA=4で、BがINT_MAX/2に近い値だと、intオーバーフローするという問題の修正です。ビデオカードのフレームバッファドライバだから、それだけ大容量のメモリが必要なことがあるということですね。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-04 13:23:26
平田豊@フォロバ100 @yutakakn

カーネル内メモリを初期化せず、ユーザ空間に渡していてカーネル内情報が漏洩していた(可能性のある)問題の修正です。KMSAN (KernelMemorySanitizer)というしくみでセキュリティ検証ができるようです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-09 13:42:29
平田豊@フォロバ100 @yutakakn

efi_call_phys_epilog関数で二重フリーする問題に対する修正ですが、関数の呼び出し方が分からないからテストしていないとありますね。どうやってテストすればいいか分からないは組み込み系あるあるです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-10 13:31:16
平田豊@フォロバ100 @yutakakn

TTYドライバの受信処理が無限ループになるという問題修正です。スタックトレース見ると、CPUのストールを検出してNMIを発行しているようです。パッチ作成者は日本人の方ですね。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-11 14:01:16
平田豊@フォロバ100 @yutakakn

ワークキューを動かすCPUを固定化させる意図として、カーネルプリエンプションの無効化処理がありましたが、意味がないとのことで取り消されています。smp_processor_id()はプリエンプション可でも使えるため。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-12 14:00:41
平田豊@フォロバ100 @yutakakn

I2C(厳密にはSMbus)アクセスが失敗した場合、メモリを解放していなかった問題修正です。「gotoは有害」としばしば言われますが、これが正しいgotoの使い方です。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-12 15:46:40
平田豊@フォロバ100 @yutakakn

MTDドライバのマクロ定義名の変更がされています。パッチ作成者は日本人でアライドテレシスの方ですが、機器のファームウェアが組み込みLinuxなのだと思われます。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-13 14:17:29
平田豊@フォロバ100 @yutakakn

USBのHIDドライバ(マウスやキーボードなど)で、CPU脆弱性スペクターへの対応です。スペクター(Spectre)はv1とv2の2種類があって、当該パッチはv1に対するものです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-16 13:25:54
平田豊@フォロバ100 @yutakakn

CPU脆弱性スペクターv1は、配列の境界外アクセスをしないように①でチェックしているつもりが、実はCPUが②と③まで先行実行していて、aにmaxを超える値を入れると、不正データが読めるという問題です(ざっくり解説)。 if (a < max) { ① index = buf1[a] * 256; ② b = buf2[index]; ③ }

2018-07-16 13:35:21
平田豊@フォロバ100 @yutakakn

CPU脆弱性スペクターv1はマイクロコードで対応するのではなく、ソフトウェアごとにいちいち修正しないといけないようなので、カーネルとデバイスドライバ屋泣かせですね(棒読み)。ユーザ空間のプログラムは特に対応不要なのかな。よく分かってないけど。

2018-07-16 16:37:45
平田豊@フォロバ100 @yutakakn

Linuxが3つのCPU脆弱性にどう対策しているかは、sysfsで分かります。 /sys/devices/system/cpu/vulnerabilities/ 下図はFedora28での実例です。Mitigationは緩和という意味。 pic.twitter.com/JoBtKAow6p

2018-07-16 16:57:55
拡大
平田豊@フォロバ100 @yutakakn

RTOSにはGPLのオープンソースソフトウェアを取り込むことはできないです。なぜならば、カーネルも含めて一枚岩だから、全部GPLで公開しないといけなくなるので。GPLでないにしても、複数ライセンスのコードの混在はかなり難しいです。

2018-07-17 12:48:52
平田豊@フォロバ100 @yutakakn

最近の本家LinuxカーネルにはRTOS化パッチが適用されていると聞きましたが、未適用で下記パッチを当てる必要がありそうです。PREEMPT_RTBとPREEMPT_RT_FULLのconfigが追加されます。 aur.archlinux.org/packages/linux…

2018-07-17 13:20:52
平田豊@フォロバ100 @yutakakn

keccakf関数に最適化(O3)の指定があったが、性能劣化するなどの問題があるので削除されました。__optimizeマクロが使われていたのは、この関数だけとのことで確かにそうでした。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会 pic.twitter.com/9IVSgafJAA

2018-07-18 11:51:55
拡大
平田豊@フォロバ100 @yutakakn

CPU脆弱性スペクターv1の対策としては、 if (a < max) { ① index = buf1[a] * 256; ② b = buf2[index]; ③ } ②でインデックスをマスクすることで範囲外アクセスを防ぎます。 index = buf1[a & mask] * 256;

2018-07-18 13:58:50
平田豊@フォロバ100 @yutakakn

CPU脆弱性問題はIntelだけでなくARMにも影響し、かつスペクターv1はソフトウェアの修正が必要なので、組み込み機器のファームウェアの対応も大変そうです。このときの対応工数(人件費)はどこから出てくると思いますか?

2018-07-18 18:59:16
平田豊@フォロバ100 @yutakakn

CPU脆弱性スペクターv1はIntelがハードで回避不可と言って、コンパイラでの対応も困難らしいので、プログラム個々の対応が恒久処置になりそうな嫌な予感。LinuxカーネルのDocumentation/speculation.txtにも解説あり。 gigazine.net/news/20180316-…

2018-07-19 00:26:41
平田豊@フォロバ100 @yutakakn

リソースの二重フリーバグの修正です。err_dputラベルに飛んだ時、path_put関数の先でiput関数を呼んでいるので、inodeが二重に解放されて、おそらくカーネルパニックとなるのでしょう。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-26 13:00:05
平田豊@フォロバ100 @yutakakn

関数のエラーチェックの仕方を間違っていた問題が修正されています。返り値が非0か負数かの取り違えも定番。CAN(Controller Area Network)というのは車載向けに考案された通信プロトコルです。 git.kernel.org/pub/scm/linux/… #カーネルパッチ勉強会

2018-07-29 12:34:19
前へ 1 2 3 ・・ 12 次へ