-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AddressSanitizerが有効だとトリップ生成時にクラッシュする #943
Comments
問題は、build flag に |
一応リンカのオプションをいじれるか見てみます |
gcc-11 は打ち消すオプションを追加すればasan有効でもプレビュー表示とテスト通りました diff --git a/src/meson.build b/src/meson.build
index a3f7e47243..d76692177e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -118,4 +118,5 @@ jdim_exe = executable(
include_directories : jdim_incs,
link_with : jdim_libs,
install : true,
+ link_args : ['-Wl,--no-as-needed'],
)
diff --git a/test/meson.build b/test/meson.build
index 2589b9c9ba..435b6b06e2 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -22,5 +22,6 @@ test_exe = executable(
dependencies : deps,
include_directories : jdim_incs,
link_with : jdim_libs,
+ link_args : ['-Wl,--no-as-needed'],
)
test('gtest tests', test_exe)
生成されたbuild.ninjaを見ると
|
ただ、全体に |
追加の検証でgcc8とgcc9はクラッシュしないことを確認しました。 問題のポイントを考えると
対応策の候補は
|
|
mesonがデフォルトで 何はともあれ、AddressSanitizerを有効にするときの注意をREADMEかINSTALLに追加したいと思います。 |
gcc(バージョン10以降)を使いAddressSanitizer(ASan)を有効にして ビルドすると書き込みのプレビューでトリップを表示するときに クラッシュすることがあります。 今のところ影響は開発者やメンテナーに限られているため 直接修正はせずASanを有効にするときの注意と回避策をREADMEに追加して 詳細はgithub issueのリンク[1]に誘導します。 背景 リンカの`-Wl,--as-needed`フラグをつけて`-fsanitize=address`で コンパイルするとlibcryptではなくlibasanの中にあるcrypt, crypt_rが リンクされますが実体がなく呼び出すとSIGSEGVが発生します。[2] [1]: JDimproved#943 [2]: https://bugzilla.redhat.com/show_bug.cgi?id=1827338
gcc(バージョン10以降)を使いAddressSanitizer(ASan)を有効にして ビルドすると書き込みのプレビューでトリップを表示するときに クラッシュすることがあります。 今のところ影響は開発者やメンテナーに限られているため 直接修正はせずASanを有効にするときの注意と回避策をREADMEに追加して 詳細はgithub issueのリンク[1]に誘導します。 背景 リンカの`-Wl,--as-needed`フラグをつけて`-fsanitize=address`で コンパイルするとlibcryptではなくlibasanの中にあるcrypt, crypt_rが リンクされますが実体がなく呼び出すとSIGSEGVが発生します。[2] [1]: #943 [2]: https://bugzilla.redhat.com/show_bug.cgi?id=1827338
READMEに注意書きを追加しましたのでissueを閉じます (#944) |
この問題は llvm 17 と gcc 14 で修正されるようです。
Ubuntu 23.10 の clang 17 を使ってテストしたところ segfault は発生しませんでした。
同じディストロでgcc 13を使ってテストしたところ segfaultが発生しました。
gcc 14 で segfault が発生しないか確かめてreadmeなどを更新したいと思います。 |
kubuntu 24.04 で gcc14 を試してみたところトリップ生成でクラッシュしなくなりました。 OSとツールチェーン $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04 LTS
Release: 24.04
Codename: noble
$ g++-14 --version
g++-14 (Ubuntu 14-20240412-0ubuntu1) 14.0.1 20240412 (experimental) [master r14-9935-g67e1433a94f]
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. meson setup $ CC=gcc-14 CXX=g++-14 meson setup asan-gcc14 -Doptimization=1 -Db_sanitize=address,undefined -Dcpp_args="-Wp,-D_GLIBCXX_ASSERTIONS -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Werror=return-type -Werror=implicit-fallthrough -Werror=narrowing -Werror=uninitialized" -Dcpp_link_args="-Wl,-z,now,-z,relro -Wl,-Bsymbolic-functions" jdimの動作環境
|
gccを使いAddressSanitizer(ASan)を有効にしてビルドすると 書き込みのプレビューでトリップを表示するときにクラッシュする問題は llvm 17 (clang 17) と gcc 14 で修正されました。 このため、README.mdを更新して影響を受けるgccのバージョンを指定します (10から13まで)。 関連のissue: #943
gccを使いAddressSanitizer(ASan)を有効にしてビルドすると 書き込みのプレビューでトリップを表示するときにクラッシュする問題は llvm 17 (clang 17) と gcc 14 で修正されました。 このため、README.mdを更新して影響を受けるgccのバージョンを指定します (10から13まで)。 関連のissue: #943
AddressSanitizerが有効だとトリップ生成時にクラッシュする
edit(2022-03-26): コメント末尾に回避策を追記
バグの説明
コンパイラのオプション AddressSanitizer(ASan) を有効にしてビルドすると
書き込みビューのプレビュー表示でトリップを生成するときにクラッシュしました。
再現の方法
#
を入力して続いて任意の文字列)を入力するやりたかったこと・期待する結果
プレビュー表示にしてもクラッシュしない
テストプログラムがクラッシュせず終了する
スクリーンショット
jdimがクラッシュしたときのログ
テストプログラムがクラッシュしたときのログ
動作環境
edit:
gcc8, gcc9ではクラッシュしない
gcc10, gcc11ではクラッシュした
追加の情報
https://src.fedoraproject.org/rpms/jd/blob/b2d927b8daced575e4c8619f1b2dd85772b46f70/f/jd.spec
https://bugzilla.redhat.com/show_bug.cgi?id=1827338
https://github.com/google/sanitizers/issues/1365
AddressSanitizerを有効にすると
crypt
、crypt_r
関数が差し替えられるようですが、差し替えに問題があり関数が正常にリンクされずクラッシュするようです。
edit(2022-03-26): ASanを有効にするときクラッシュを回避する方法
事前に環境変数 LDFLAGS を設定してビルドする
または、mesonのコマンドラインオプション
-Db_asneeded
でフラグを変更するThe text was updated successfully, but these errors were encountered: