【続 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 にどうやってレポートするといいか考えている