memstompというライブラリがある。
デバッグ用ライブラリでmemcpyやそれに類する関数で2つの引数が指す領域がオーバーラップしており不定動作になってしまうようなケースを検出して間違っている箇所をバックトレースで教えてくれる。

対象の関数は以下

memcpy(), memccpy(), mempcpy(), strcpy(), stpcpy(), strncpy(), stpncpy(), strcat(), strncat(), wmemcpy(), wmempcpy(), wcscpy(), wcsncpy(), wcscat(), and wcsncat()



使い方は、Red Hat社 による、Red Hat Developer Toolset のドキュメントが一番わかり易い
https://access.redhat.com/site/documentation/en-US/Red_Hat_Developer_Toolset/2/html/User_Guide/sect-memstomp-Use.html

残念なことに Developer Toolsetのsclコマンドの使い方と混ざってしまっていて、Fedora、RHEL7でどうすればいいのか今ひとつ分かりにくいので簡単に解説してみる。
なお元ドキュメントはCC-BY-SAライセンスなので、この記事では遠慮なくサンプルコードを再利用させてもらう事にする。

この手のライブラリの定番ではあるが内部動作としてはLD_PRELOADを使っているが、利便性のためにラッパーコマンドが提供されており普段はこちらを使うことになる

# memstomp [-dk] program [argument...]



-d, --debug-info はバックトレース表示時にdebug infomationを使うという指定。これを指定しないと行番号が取れないので使用を強く推奨。
-k, --kill はオーバーラップ発見時にプログラム実行を停止するオプション

詳しく知りたい人は以下のURLに man を転載しておくのでどうぞ
https://gist.github.com/kosaki/9561104


さて、最初のURLのサンプルに戻る(コピペしやすいように以下のURLにコードを転載しておく https://gist.github.com/kosaki/9560671
見ての通り、strcat(employee, email) の行が間違っており、引数が overlapしてしまっている。

こいつを

# gcc -rdynamic -g -o employee employee.c



とコンパイルし、
※ -rdynamic はデバッグオプション非使用時のバックトレースをリッチにするためだけに必要なので -g があればなくても良い

# memstomp --debug-info ./employee



と実行する。
参考までに私の環境での実行結果を貼っておく https://gist.github.com/kosaki/9561220
このエントリーをはてなブックマークに追加

1a3a70ee.jpg


なぜか同日に到着したので2連続の物欲ポストになってしまうが、ジンバブエの100兆ドル紙幣を
記念として購入。100兆だぜ、100兆、こんな大金手にすることもうないかもしれん。うは
このエントリーをはてなブックマークに追加

43eabe97.jpg


goto fail Tシャツ買った。
いい買い物をした。ほくほく

次の出張では忘れずに持っていかないと
このエントリーをはてなブックマークに追加

https://bugzilla.kernel.org/show_bug.cgi?id=69771

最近のcryptはエラーリターンするかもしれないんだけど、manに反映されてなかったので対応依頼してたのだが
本日これが完了したようだ

Rubyがこのバグで問題になったケースがこちら
https://bugs.ruby-lang.org/issues/7312

glibcでのこの件についての議論はこのへん
http://sourceware-org.1504.n7.nabble.com/RFC-FIPS-compliance-and-other-crypt-3-improvements-td6884.html


cryptユーザー各位(いないと思うけど)におかれましては、くれぐれはエラーチェックをせずにcryptを使うことなきようお願い致します。
このエントリーをはてなブックマークに追加

https://groups.google.com/forum/#!topic/fluentd/dXc4weNEdCg

# New core committer

Motohiro Kosaki is now a Fluentd Committer.
Welcome!!

He is a Linux Kernel and Ruby committer, so
his experience and knowledge are very helpful for Fluentd and Fluentd community :)
We can improve and grow the Fluentd more quickly!


Enjoy Fluentd!



なにやら、Motohiro Kosakiという New Committerがやたらと持ち上げられてるが、
わたしの知っているこさきさんとはキャラクターが大きく異なるのできっと別人だろう。
このエントリーをはてなブックマークに追加

↑このページのトップヘ