【続 Vol.3】CentOS7.5 の fsnotify がレースコンディションを起こすバグ : kernel-3.10.0-862.9.1.el7 で fix された

CentOS の 3.10.0-862.9.1.el7 がリリースされています

しばらく前から fsnotify() がレースコンディンションを起こすバグをしばらくトラッキングしていましたが、このリリースで fix されました

hiboma.hatenadiary.jp

kernel-plus パッケージを使うことで問題を回避できましたが、今回のリリースで kernel パッケージでも大丈夫となりました。nginx + td_agent + in_tail プラグインな構成を安心して動かせますね

changelog の確認

下記が該当のログだと思われます

* Wed Jun 06 2018 Rado Vrbovsky <rvrbovsk@redhat.com> [3.10.0-862.7.1.el7]
- [linux] fsnotify: Fix fsnotify_mark_connector race (Miklos Szeredi) [1584684 1569921]

再現スクリプトを実行して確認

hiboma.hatenadiary.jp

changelog を信頼してない訳ではないですが、自分でも確かめました。上記エントリにも載せた再現スクリプトを実行してみて再現しませんでした。

大丈夫そうですね 。やったー

CentOS の issue

0014823: 3.10.0-862.2.3.el7.x86_64 kernel panic and crash under Xen PV with NMI watchdog: BUG: soft lockup - CPU#2 - CentOS Bug Tracker のステータスが resolved となりました

【続 Vol.2】CentOS7.5 の fsnotify がレースコンディションを起こすバグ : kernel-3.10.0-862.6.3.el7.x86_64 が出たけど直らず

hiboma.hatenadiary.jp

  • CentOS7 の kernel-3.10.0-862.6.3.el7 がリリースされていますが、上記エントリで触れた fsnotiry() のバグはまだ直っていません
  • CentOS Plus リポジトリの kernel-plus-3.10.0-862.6.3.el7 で修正パッチがあたっています
  • 弊社 GMOペパボでは、バグを踏みうる構成の場合 kernel-plus を入れるアップデートを促しています

以降の記述はバグの再現をとったり、パッケージの差分をメモした内容です。詳細に興味がなければスキップしてください

続きを読む

【続 Vol.3】CentOS7.5 の perf probe / perf record のバグと思われる挙動を調べ中 - ビルドしての検証

hiboma.hatenadiary.jp

これの続きを調べていた

SPRM からソースを展開して、問題のあるカーネルとそうでないカーネルとの diff を見ながら、関係がありそうな変更を削ったり/足したりしながら手元でビルドして試したころ、下記の変更によって起きる問題だと絞り込めた

diff -ru /home/vagrant/rpmbuild/BUILD/kernel-3.10.0-862.el7/linux-3.10.0-862.el7.centos.x86_64/arch/x86/kernel/entry_64.S /home/vagrant/rpmbuild/BUILD/kernel-3.10.0-862.2.3.el7/linux-3.10.0-862.2.3.el7.x8
6_64/arch/x86/kernel/entry_64.S
--- /home/vagrant/rpmbuild/BUILD/kernel-3.10.0-862.el7/linux-3.10.0-862.el7.centos.x86_64/arch/x86/kernel/entry_64.S    2018-03-21 21:40:12.000000000 +0000
+++ /home/vagrant/rpmbuild/BUILD/kernel-3.10.0-862.2.3.el7/linux-3.10.0-862.2.3.el7.x86_64/arch/x86/kernel/entry_64.S   2018-04-30 14:05:40.000000000 +0000
@@ -1400,7 +1400,7 @@
        .pushsection .kprobes.text, "ax"
 
 paranoidzeroentry_ist debug do_debug DEBUG_STACK
-paranoidzeroentry_ist int3 do_int3 DEBUG_STACK
+zeroentry int3 do_int3
 errorentry stack_segment do_stack_segment
 #ifdef CONFIG_XEN
 zeroentry xen_debug do_debug

上記の変更を取り除くと、SIGSEGV は治まった.

該当のコミットを %changelog で調べる

https://git.centos.org/summary/rpms!kernel.git を git clone して imports/c7/kernel-3.10.0-862.2.3.el ブランチの SPECS/kernel.spec を見て見るに下記の変更っぽい

%changelog
* Mon Apr 30 2018 Rado Vrbovsky <rvrbovsk@redhat.com> [3.10.0-862.2.3.el7]
- [x86] kvm: fix icebp instruction handling (Paolo Bonzini) [1566849 1566845] {CVE-2018-1087}
- [x86] entry/64: Don't use IST entry for #BP stack (Paolo Bonzini) [1567084 1567083] {CVE-2018-8897} 👈

(CentOS で spec ファイルの %changelog と diff を付き合わせるよい方法がわからない)

upstream のコミットを調べる

もともと upstrem には下記のコミットでマージされたようだ.

github.com

自分が見ていたコードとはだいぶ違う. バックポートの際に変更が加わっているのだろう

どういう意図の変更なのか

CVE-2018-8897 の fix である

コードを追って見たものの、どうやって不具合に至るのかという詳細まではよく分からない 🙃

その他

/sys/kernel/debug/tracing がぶっこわれているということで、 似たような問題が下記で議論されたり パッチが revert されていた


bugs.centos.org にどうやってレポートするといいか考えている

入間〜日高〜川越 🚲

6/24(日) 前日から天気が崩れていたが、午後にかけて晴れ始めたタイミングで出走。が、湿気と日差しと強烈でバテたので、すぐ帰った

f:id:hiboma:20180625234007p:plain

90km 走って終わり. 夏場は涼しい時間に山に入って、暑さを避けないと距離を稼げないなぁ

入間川

雨上がりで澄んだ空気

途中、所沢のあたりで蝉の鳴き声を聞いた気がする.

奥武蔵グリーンライン

日高市巾着田のあたりから奥武蔵グリーンラインに入ろうとしたのだけど、なんと通行止め

ここで完全に気力がはてた. 帰って風呂に入る決意を固める

川越

帰路で川越を通過。喜多院で小休憩.

観光客も少なくてのんびりしてた

【続 Vol.2】CentOS7.5 の perf probe / perf record のバグと思われる挙動を調べ中 - bugs.centos.org にレポート

hiboma.hatenadiary.jp

これの続き.

分かっている事をまとめて 0014961: perf probe / perf record cause segmentation fault - CentOS Bug Tracker にバグレポートをだして Confirm してもらえました.

【続】CentOS7.5 の perf probe / perf record のバグと思われる挙動を調べ中

hiboma.hatenadiary.jp

上記のエントリを書いたのだが、VM を作り直したところ再現がとれなくなったので改めて検証しなおした.

(別のバグを調査した VM を使いまわしたのだが、パッケージインストール後にカーネルパニックを起こした影響かでパッケージ/ファイルの一部が欠損しまったらしい)

環境 / Environment

[vagrant@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-862.3.3.el7.x86_64 #1 SMP Fri Jun 15 04:15:27 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

[vagrant@localhost ~]$ rpm -q perf
perf-3.10.0-862.3.3.el7.x86_64

[vagrant@localhost ~]$ rpm -q glibc
glibc-2.17-222.el7.x86_64

再現方法 / Steps to reproduce

perf probe で malloc を追加する

[root@localhost ~]# perf probe -x /usr/lib64/libc.so.6 malloc
Added new event:
  probe_libc:malloc    (on malloc in /usr/lib64/libc-2.17.so)

You can now use it in all perf tools, such as:

        perf record -e probe_libc:malloc -aR sleep 1
[root@localhost ~]# perf record -e probe_libc:malloc -aR sleep 1
perf: Segmentation fault
Segmentation fault

perf が Segmentation fault する.

続きを読む