OpenSSLのメモリリーク [プログラミング]
mailpeeper-tlsのメモリリークの多くが、OpenSSLのメモリリークっぽい。
素直にググるとここが出てくるので、その後も素直にリンクを辿る。
http://d.hatena.ne.jp/emergent/20060703/1152415753
http://soft3304.net/04WebServer/TechInfo.html
もう5年以上前の情報か…。
本家サイトのFAQにありますね。これだと ERR_remove_state()をやたら埋め込まないといけなさそうです。
http://www.openssl.org/support/faq.html#PROG13
いろんなところに埋め込んでみたけれど、何だか上手くいってないみたい。だからdeprecatedにしちゃうのかもしれない。メモリリークを色々な関数を入れ込んだり、入れ込まなかったりして見てみたけれども、結局漏れてました。なんだこのライブラリわ。結構、このライブラリに関しては悪態をついている人も多いんだけれど、あるだけマシって感じの状態って言われても仕方ない気がしました。
Deprecatedな関数とされていたのは、こっちのヘッダを見ていたからかも。
/usr/include/openssl/ssl.h
実際にアクティビティモニタで見ていたら
/usr/lib/libssl.0.9.8.dylib
ってところのライブラリを使ってましたよ。これって自分のdylibを見る事って出来ないのかな。少しはバージョン若いから、動きがいい可能性はあるんだけどなぁ。
前に自分のdylibに差し向けた時があったから、少し前のブログを読んでみる。
http://miff.blog.so-net.ne.jp/2010-12-25
コンパイラの設定に
LD_DYLIB_INSTALL_NAME = @executable_path/
ってのがあって、それをXcode 4の移行の時に、すべてなぎ倒されたらしい。そういや、色々設定できていたのがどうなってしまっているのかが全然分からない。探したんだけど、デフォルト設定がなくなっていて、指定だけは出来るようになっている程度で、手がかりなしではプロジェクトの設定では何も出来なくなっていたと思う。
んー書いてはあるけど、色々しても上手くいかない。
Firefoxの中身を見てみたら、libssl3.dylibってのを使っているので、調べていたらどうやらMozilla自前のライブラリらしい。opensslの関数はやたらたくさんあったけど、libssl3ってのはnmで見る限りではそんなには多くない。お手軽にできれば、opensslからlibssl3に変更したい。
http://www.mozilla.org/projects/security/pki/nss/ref/ssl/
今度、時間があったら考えよう。でも、結局、自分の使っているライブラリに向けて、リンクできないとlibssl3を使えるようになっても使えないのでダメダメですな。
ちょっとNSSを持ってきてコンパイルかけたけど、容易にコンパイルできなかったりして簡単にはいかない模様。そしてOpenSSLよりも遥に情報は少なくて、ソースの解説などはほとんどない。これはFirefoxとかThunderbirdとかのソースを直接見るしかないかも。
http://bleepsandpops.com/post/8447919182/adding-the-fmod-api-to-an-xcode-4-project
ここいら当たりを見れば出来そうだけど、何となく出来てない。ん〜。既存のリンク先があるって言うのが問題なんでしょうね、多分。
素直にググるとここが出てくるので、その後も素直にリンクを辿る。
http://d.hatena.ne.jp/emergent/20060703/1152415753
http://soft3304.net/04WebServer/TechInfo.html
ライブラリ開放時、以下のコードを全て実行する必要がある ERR_free_strings() EVP_cleanup() CRYPTO_cleanup_all_ex_data() 全て実行しないとリークするようです。 スレッドの終了時、ERR_remove_state(0) を実行する必要がある これをしないと、スレッドが終了するたびにメモリリークを起こします。
もう5年以上前の情報か…。
本家サイトのFAQにありますね。これだと ERR_remove_state()をやたら埋め込まないといけなさそうです。
http://www.openssl.org/support/faq.html#PROG13
いろんなところに埋め込んでみたけれど、何だか上手くいってないみたい。だからdeprecatedにしちゃうのかもしれない。メモリリークを色々な関数を入れ込んだり、入れ込まなかったりして見てみたけれども、結局漏れてました。なんだこのライブラリわ。結構、このライブラリに関しては悪態をついている人も多いんだけれど、あるだけマシって感じの状態って言われても仕方ない気がしました。
Deprecatedな関数とされていたのは、こっちのヘッダを見ていたからかも。
/usr/include/openssl/ssl.h
実際にアクティビティモニタで見ていたら
/usr/lib/libssl.0.9.8.dylib
ってところのライブラリを使ってましたよ。これって自分のdylibを見る事って出来ないのかな。少しはバージョン若いから、動きがいい可能性はあるんだけどなぁ。
前に自分のdylibに差し向けた時があったから、少し前のブログを読んでみる。
http://miff.blog.so-net.ne.jp/2010-12-25
コンパイラの設定に
LD_DYLIB_INSTALL_NAME = @executable_path/
ってのがあって、それをXcode 4の移行の時に、すべてなぎ倒されたらしい。そういや、色々設定できていたのがどうなってしまっているのかが全然分からない。探したんだけど、デフォルト設定がなくなっていて、指定だけは出来るようになっている程度で、手がかりなしではプロジェクトの設定では何も出来なくなっていたと思う。
んー書いてはあるけど、色々しても上手くいかない。
Firefoxの中身を見てみたら、libssl3.dylibってのを使っているので、調べていたらどうやらMozilla自前のライブラリらしい。opensslの関数はやたらたくさんあったけど、libssl3ってのはnmで見る限りではそんなには多くない。お手軽にできれば、opensslからlibssl3に変更したい。
http://www.mozilla.org/projects/security/pki/nss/ref/ssl/
今度、時間があったら考えよう。でも、結局、自分の使っているライブラリに向けて、リンクできないとlibssl3を使えるようになっても使えないのでダメダメですな。
ちょっとNSSを持ってきてコンパイルかけたけど、容易にコンパイルできなかったりして簡単にはいかない模様。そしてOpenSSLよりも遥に情報は少なくて、ソースの解説などはほとんどない。これはFirefoxとかThunderbirdとかのソースを直接見るしかないかも。
http://bleepsandpops.com/post/8447919182/adding-the-fmod-api-to-an-xcode-4-project
ここいら当たりを見れば出来そうだけど、何となく出来てない。ん〜。既存のリンク先があるって言うのが問題なんでしょうね、多分。
タグ:freesoft
コメント 0