[#44014] Re: [ruby-core:37707] [Ruby 1.9 - Bug #3781] FIBER_USE_NATIVE が有効だと落ちるスクリプトがある — Narihiro Nakamura <authornari@...>

nariです。

14 messages 2011/07/02
[#44019] Re: [ruby-core:37707] [Ruby 1.9 - Bug #3781] FIBER_USE_NATIVE が有効だと落ちるスクリプトがある — KOSAKI Motohiro <kosaki.motohiro@...> 2011/07/02

> 本当はgc_mark()の際に毎回stack_check()するのがいいと思うのですが、

[#44027] [RubyKaigi] Next version of Ruby 1.8 and 1.9 — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

16 messages 2011/07/03

[#44156] [Ruby 1.9 - Feature #5053][Open] ruby コマンドと libruby の食い違いチェック — Makoto Kishimoto <redmine@...>

20 messages 2011/07/19

[#44185] [Ruby 1.9 - Bug #5074][Open] "[BUG] cfp consistency error - send" on TestEnumerator#test_feed_yielder (test/ruby/test_enumerator.rb) — Shota Fukumori <sorah@...>

10 messages 2011/07/22

[#44189] [Ruby 1.9 - Bug #5075][Assigned] invalid *fdp in Mac OS X and FreeBSD over recvmsg with SCM_RIGHTS — Yui NARUSE <naruse@...>

12 messages 2011/07/22

[#44210] 1.9.3 (以降) の BigDecimal について — Tadayoshi Funaba <tadf@...>

BigDecimal() で整数、浮動小数点数、有理数などを受けとれるようになって、

14 messages 2011/07/23
[#44275] Re: 1.9.3 (以降) の BigDecimal について — Tadayoshi Funaba <tadf@...> 2011/07/30

変換には明示的なものとそうでないものがありますが、

[#44276] Re: 1.9.3 (以降) の BigDecimal について — Kenta Murata <muraken@...> 2011/07/31

=E3=82=80=E3=82=89=E3=81=9F=E3=81=A7=E3=81=99=E3=80=82 =20

[#44223] [Ruby 1.9 - Bug #5094][Assigned] Supported platforms of Ruby 1.9.3 — Yui NARUSE <naruse@...>

21 messages 2011/07/25
[#44229] Re: [Ruby 1.9 - Bug #5094][Assigned] Supported platforms of Ruby 1.9.3 — KOSAKI Motohiro <kosaki.motohiro@...> 2011/07/25

> == 成瀬の提案

[#44230] Re: [Ruby 1.9 - Bug #5094][Assigned] Supported platforms of Ruby 1.9.3 — Urabe Shyouhei <shyouhei@...> 2011/07/26

卜部です

[#44236] Re: [Ruby 1.9 - Bug #5094][Assigned] Supported platforms of Ruby 1.9.3 — Yusuke ENDOH <mame@...> 2011/07/26

遠藤です。

[#44254] [Ruby 1.8 - Bug #5105][Open] CGI::Session#session_id の生成方法について — Masahiro Tomita <tommy@...>

14 messages 2011/07/27
[#44256] [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — Yui NARUSE <naruse@...> 2011/07/27

[#44258] Re: [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — とみたまさひろ <tommy@...> 2011/07/27

とみたです。

[#44262] Re: [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — "NARUSE, Yui" <naruse@...> 2011/07/27

(2011/07/27 19:47), とみたまさひろ wrote:

[#44263] Re: [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — とみたまさひろ <tommy@...> 2011/07/27

とみたです。

[#44270] Re: [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — とみたまさひろ <tommy@...> 2011/07/29

とみたです。

[#44271] Re: [Ruby 1.8 - Bug #5105] CGI::Session#session_id の生成方法について — Tanaka Akira <akr@...> 2011/07/29

2011年7月29日20:04 とみたまさひろ <tommy@tmtm.org>:

[ruby-dev:44192] [Ruby 1.9 - Bug #5075] invalid *fdp in Mac OS X and FreeBSD over recvmsg with SCM_RIGHTS

From: Motohiro KOSAKI <kosaki.motohiro@...>
Date: 2011-07-22 12:30:54 UTC
List: ruby-dev #44192
Issue #5075 has been updated by Motohiro KOSAKI.


xnu/bsd/kern/uipc_socket.c  に全く同じコメントがあるので、FreeBSD由来のコードで同じ問題にあたってるんじゃないですかね。

----------------------------------------
Bug #5075: invalid *fdp in Mac OS X and FreeBSD over recvmsg with SCM_RIGHTS
http://redmine.ruby-lang.org/issues/5075

Author: Yui NARUSE
Status: Assigned
Priority: Normal
Assignee: Akira Tanaka
Category: ext
Target version: 1.9.3
ruby -v: ruby 1.9.4dev (2011-07-22 trunk 32604) [x86_64-freebsd8.2]


Mac OS X と FreeBSD にて、存在しない fd を close してしまう問題について、
現在 r32598 で応急処置が施されていますが、根本的な原因について、
sys/kern/uipc_socket.c を見るに、
http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/uipc_socket.c?rev=1.340.2.6.2.1;content-type=text%2Fplain;only_with_tag=RELENG_8_2_0_RELEASE

	 * Process one or more MT_CONTROL mbufs present before any data mbufs
	 * in the first mbuf chain on the socket buffer.  If MSG_PEEK, we
	 * just copy the data; if !MSG_PEEK, we call into the protocol to
	 * perform externalization (or freeing if controlp == NULL).

とあるので、recvmsg に MSG_PEEK を与えた場合は invalid なものが返ってくると思うのですが。

ちなみに、以下のような printf パッチをあてて走らせると、discard_cmsg() に来たものは全て invalid になっています。

diff --git a/ext/socket/ancdata.c b/ext/socket/ancdata.c
index 61e0576..ad44fb4 100644
--- a/ext/socket/ancdata.c
+++ b/ext/socket/ancdata.c
@@ -1379,6 +1379,7 @@ rb_recvmsg(int fd, struct msghdr *msg, int flags)
 static void
 discard_cmsg(struct cmsghdr *cmh, char *msg_end)
 {
+    fprintf(stderr, "discard_cmsg-begin\n");
     if (cmh->cmsg_level == SOL_SOCKET && cmh->cmsg_type == SCM_RIGHTS) {
         int *fdp = (int *)CMSG_DATA(cmh);
         int *end = (int *)((char *)cmh + cmh->cmsg_len);
@@ -1391,12 +1392,18 @@ discard_cmsg(struct cmsghdr *cmh, char *msg_end)
              */
             struct stat buf;
             if (fstat(*fdp, &buf) == 0) {
+           fprintf(stderr, "fdp: %d is valid   (%p %p %p)\n", *fdp,fdp,end,msg_end);
                 rb_update_max_fd(*fdp);
                 close(*fdp);
             }
+           else {
+               fprintf(stderr, "fdp: %d is invalid (%p %p %p)\n", *fdp,fdp,end,msg_end);
+               rb_backtrace();
+           }
             fdp++;
         }
     }
+    fprintf(stderr, "discard_cmsg-end\n");
 }
 #endif
 
@@ -1432,6 +1439,7 @@ make_io_for_unix_rights(VALUE ctl, struct cmsghdr *cmh, char *msg_end)
               (char *)fdp + sizeof(int) <= msg_end) {
             int fd = *fdp;
             struct stat stbuf;
+  fprintf(stderr,"makeiounixr: %d (%p %p %p)\n", *fdp,fdp,end,msg_end);
             VALUE io;
             if (fstat(fd, &stbuf) == -1)
                 rb_raise(rb_eSocket, "invalid fd in SCM_RIGHTS");


-- 
http://redmine.ruby-lang.org

In This Thread