Bug #5039

Re: socket related errors on chkbuild

Added by Akira Tanaka almost 3 years ago. Updated over 2 years ago.

[ruby-dev:44125]
Status:Closed
Priority:High
Assignee:Hiroshi Nakamura
Category:core
Target version:1.9.3
ruby -v:- Backport:

Description

2011年7月16日23:09 Tanaka Akira akr@fsij.org:

1) Error:
testwritenonblock(OpenSSL::TestPair):

これは原因が違うようで、直っていません。

これが起き始めたのはそんなに古くないのですね。
http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20110624T071200Z.diff.html.gz
からなんですが、

+Fri Jun 24 15:54:14 2011 Hiroshi Nakamura nahi@ruby-lang.org
+
+ * ext/openssl/osslssl.c (osslsslshutdown): Try to shutdown SSL
+ connection more gracefully. Call SSL
shutdown() max 4 times until it
+ returns 1 (success). Bi-directional SSL close has several states but
+ SSLshutdown() kicks only 1 transition per call. Max 4 is from
+ mod
ssl.c of Apache httpd that says 'max 2x pending + 2x data = 4'.
+ See #4237.

というコミット以来のようです。
--
[田中 哲][たなか あきら][Tanaka Akira]

Associated revisions

Revision 32658
Added by Hiroshi Nakamura over 2 years ago

  • ext/openssl/osslssl.c (osslsslshutdown): Avoid randomly generated
    SSLError from SSLSocket just after invoking SSLSocket#close.
    OpenSSL's SSL
    shutdown could try to send alert packet and it might
    set SSLerr(global error stack) as the result. It causes the next
    SSL read/write operation to fail by unrelated reason.

    By design, we're ignoring any error at SSLshutdown() so we clear
    global error stack after SSL
    shutdown is called. See #5039.

History

#1 Updated by Motohiro KOSAKI almost 3 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to Hiroshi Nakamura
  • Target version set to 1.9.3

#2 Updated by Motohiro KOSAKI almost 3 years ago

1) Error:
testwritenonblock(OpenSSL::TestPair):

これは原因が違うようで、直っていません。

これが起き始めたのはそんなに古くないのですね。
http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20110624T071200Z.diff.html.gz
からなんですが、

+Fri Jun 24 15:54:14 2011 Hiroshi Nakamura nahi@ruby-lang.org
+
+ * ext/openssl/osslssl.c (osslsslshutdown): Try to shutdown SSL
+ connection more gracefully. Call SSL
shutdown() max 4 times until it
+ returns 1 (success). Bi-directional SSL close has several states but
+ SSLshutdown() kicks only 1 transition per call. Max 4 is from
+ mod
ssl.c of Apache httpd that says 'max 2x pending + 2x data = 4'.
+ See #4237.

というコミット以来のようです。

ということなら regressionなので特別な理由が無い限り1.9.3 releaseまでに修正要と
思います。

#3 Updated by Motohiro KOSAKI almost 3 years ago

1) Error:
testwritenonblock(OpenSSL::TestPair):

これは原因が違うようで、直っていません。

これが起き始めたのはそんなに古くないのですね。
http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20110624T071200Z.diff.html.gz
からなんですが、

+Fri Jun 24 15:54:14 2011 Hiroshi Nakamura nahi@ruby-lang.org
+
+ * ext/openssl/osslssl.c (osslsslshutdown): Try to shutdown SSL
+ connection more gracefully. Call SSL
shutdown() max 4 times until it
+ returns 1 (success). Bi-directional SSL close has several states but
+ SSLshutdown() kicks only 1 transition per call. Max 4 is from
+ mod
ssl.c of Apache httpd that says 'max 2x pending + 2x data = 4'.
+ See #4237.

というコミット以来のようです。

ということなら regressionなので特別な理由が無い限り1.9.3 releaseまでに修正要と
思います。

#4 Updated by Hiroshi Nakamura almost 3 years ago

水曜日に見ます。が、再現させるのに時間がかかるかもしれません。手元では出てないんですが、他にこのエラー出てる方が居たら情報提供お願いします。

akrさんに聞いたところによると、boronはDebian lennyで、Debian lennyは0.9.8gなんですね。それほど古いわけでもないなあ。

#5 Updated by Akira Tanaka almost 3 years ago

2011年7月18日7:15 Hiroshi Nakamura nakahiro@gmail.com:

水曜日に見ます。が、再現させるのに時間がかかるかもしれません。手元では出てないんですが、他にこのエラー出てる方が居たら情報提供お願いします。

boron でない、手元の Debian lenny でも起きますね。

また、検索すると、
http://redmine.ruby-lang.org/issues/4923 では
Ubuntu 10.04 with OpenSSL 0.9.8k でも起きているという報告がありますね。
(なひさんのコメントもあります。)

akrさんに聞いたところによると、boronはDebian lennyで、Debian lennyは0.9.8gなんですね。それほど古いわけでもないなあ。

boron% ldd .ext/i686-linux/openssl.so
linux-gate.so.1 => (0xb7fe8000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7f4c000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7df9000)
libpthread.so.0 => /lib/i686/nosegneg/libpthread.so.0 (0xb7de0000)
librt.so.1 => /lib/i686/nosegneg/librt.so.1 (0xb7dd6000)
libdl.so.2 => /lib/i686/nosegneg/libdl.so.2 (0xb7dd2000)
libcrypt.so.1 => /lib/i686/nosegneg/libcrypt.so.1 (0xb7da0000)
libm.so.6 => /lib/i686/nosegneg/libm.so.6 (0xb7d7a000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0xb7c1c000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7c07000)
/lib/ld-linux.so.2 (0x80000000)
boron% dpkg -l|grep libssl
ii libssl-dev 0.9.8g-15+lenny11
SSL development libraries, header files and
ii libssl0.9.7 0.9.7k-3.1etch5
SSL shared libraries
ii libssl0.9.8 0.9.8g-15+lenny11
SSL shared libraries
--
[田中 哲][たなか あきら][Tanaka Akira]

#6 Updated by Akira Tanaka almost 3 years ago

2011年7月18日7:15 Hiroshi Nakamura nakahiro@gmail.com:

水曜日に見ます。が、再現させるのに時間がかかるかもしれません。手元では出てないんですが、他にこのエラー出てる方が居たら情報提供お願いします。

boron でない、手元の Debian lenny でも起きますね。

また、検索すると、
http://redmine.ruby-lang.org/issues/4923 では
Ubuntu 10.04 with OpenSSL 0.9.8k でも起きているという報告がありますね。
(なひさんのコメントもあります。)

akrさんに聞いたところによると、boronはDebian lennyで、Debian lennyは0.9.8gなんですね。それほど古いわけでもないなあ。

boron% ldd .ext/i686-linux/openssl.so
linux-gate.so.1 => (0xb7fe8000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7f4c000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7df9000)
libpthread.so.0 => /lib/i686/nosegneg/libpthread.so.0 (0xb7de0000)
librt.so.1 => /lib/i686/nosegneg/librt.so.1 (0xb7dd6000)
libdl.so.2 => /lib/i686/nosegneg/libdl.so.2 (0xb7dd2000)
libcrypt.so.1 => /lib/i686/nosegneg/libcrypt.so.1 (0xb7da0000)
libm.so.6 => /lib/i686/nosegneg/libm.so.6 (0xb7d7a000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0xb7c1c000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7c07000)
/lib/ld-linux.so.2 (0x80000000)
boron% dpkg -l|grep libssl
ii libssl-dev 0.9.8g-15+lenny11
SSL development libraries, header files and
ii libssl0.9.7 0.9.7k-3.1etch5
SSL shared libraries
ii libssl0.9.8 0.9.8g-15+lenny11
SSL shared libraries
--
[田中 哲][たなか あきら][Tanaka Akira]

#7 Updated by Motohiro KOSAKI over 2 years ago

  • Priority changed from Normal to High

#8 Updated by Hiroshi Nakamura over 2 years ago

  • Status changed from Assigned to Closed

田中さんの書かれているように、#4923の件と同じでした(#4923は、最初に登録されていたエラーと、途中から議論していたエラーがすり替わっており、その後者と、今回boronで発生するようになったエラーが同じでした)。

SSLSocket#closeでOpenSSLのSSLshutdown()を呼んでいるんですが、返ってきた後のエラーチェック(およびOpenSSL側エラースタックのクリア)をしていませんでした。使う理由もないので、trunkはr32685、ruby193はr32660で、エラースタックをクリアするようにしました。r32219でSSL_shutdownを呼ぶ回数が増えたので、このエラーが発言し易くなったものと考えています。

boronのchkbuildでエラーがなくなったので、Closeします。

Also available in: Atom PDF