ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
@ 2011-10-09 15:39 Makoto Kishimoto
  2011-10-09 16:52 ` [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Yui NARUSE
                   ` (13 more replies)
  0 siblings, 14 replies; 21+ messages in thread
From: Makoto Kishimoto @ 2011-10-09 15:39 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been reported by Makoto Kishimoto.

----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Open
Priority: Low
Assignee: 
Category: core
Target version: 1.9.x
ruby -v: ruby 1.9.4dev (2011-10-09 trunk 33439) [x86_64-freebsd8.2]


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
@ 2011-10-09 16:52 ` Yui NARUSE
  2011-10-09 19:38   ` [ruby-dev:44591] " KOSAKI Motohiro
  2011-11-09 22:37 ` [ruby-dev:44847] [ruby-trunk " Motohiro KOSAKI
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 21+ messages in thread
From: Yui NARUSE @ 2011-10-09 16:52 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Yui NARUSE.


ざっと調べてみましたが、

== POSIX
int ioctl(int fildes, int request, ... /* arg */);
http://pubs.opengroup.org/onlinepubs/9699919799/functions/ioctl.html

== AIX
int ioctl (fd, request, .../*arg*/)
int  fd;
int  request;
int  .../*arg*/;
http://publib.boulder.ibm.com/infocenter/aix/v6r1/topic/com.ibm.aix.commtechref/doc/commtrf2/ioctl.htm

== Solaris
int ioctl(int fildes, int request, /* arg */ ...);
http://download.oracle.com/docs/cd/E19963-01/html/821-1463/ioctl-2.html

== HP-UX
int ioctl(int fildes, int request, ... /* arg */);
http://nixdoc.net/man-pages/HP-UX/man2/ioctl.2.html

== Tru64
int ioctl(
               int fildes,
               int request,
               ... /* arg */ );
http://nixdoc.net/man-pages/Tru64/man2/ioctl.2.html

== IRIX
int ioctl (int fildes, int request, ...);
http://nixdoc.net/man-pages/irix/man2/ioctl.2.html

== Linux
extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
manpageは以下の通りだが、実際のヘッダは異なる。
int ioctl(int d, int request, ...);
https://www.kernel.org/doc/man-pages/online/pages/man2/ioctl.2.html

== NetBSD
int ioctl(int d, unsigned long request, ...);
http://netbsd.gw.com/cgi-bin/man-cgi?ioctl+2+NetBSD-current

== OpenBSD
int ioctl(int d, unsigned long request, ...);
http://www.openbsd.org/cgi-bin/man.cgi?query=ioctl&sektion=2&format=html

== Darwin
int ioctl(int fildes, unsigned long request, ...);
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/ioctl.2.html

いやー、やっぱり Linux はダメですね!ってのはおいといて、
商用 UNIX は int、それ以外は unsigned long っぽいですね。
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Open
Priority: Low
Assignee: 
Category: core
Target version: 1.9.x
ruby -v: ruby 1.9.4dev (2011-10-09 trunk 33439) [x86_64-freebsd8.2]


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44591] Re: [Ruby 1.9 - Bug #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 16:52 ` [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Yui NARUSE
@ 2011-10-09 19:38   ` KOSAKI Motohiro
  0 siblings, 0 replies; 21+ messages in thread
From: KOSAKI Motohiro @ 2011-10-09 19:38 UTC (permalink / raw
  To: ruby developers list

> == Linux
> extern int ioctl (int __fd, unsigned long int __request, ...) __THROW;
> manpageは以下の通りだが、実際のヘッダは異なる。
> int ioctl(int d, int request, ...);
> https://www.kernel.org/doc/man-pages/online/pages/man2/ioctl.2.html
>
> いやー、やっぱり Linux はダメですね!ってのはおいといて、
> 商用 UNIX は int、それ以外は unsigned long っぽいですね。

うう・・すいません
Linuxのmanはこちらであずかります。man pageメンテナが夜逃げ中なので
ちょっと時間かかるかも

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44847] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
  2011-10-09 16:52 ` [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Yui NARUSE
@ 2011-11-09 22:37 ` Motohiro KOSAKI
  2011-11-09 23:10 ` [ruby-dev:44848] " Motohiro KOSAKI
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-09 22:37 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


途中までやってみましたが、ioctlはunsigned longでもfcntl はintなので、もうちょっと工夫がいりますね。
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Open
Priority: Low
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: -


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44848] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
  2011-10-09 16:52 ` [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Yui NARUSE
  2011-11-09 22:37 ` [ruby-dev:44847] [ruby-trunk " Motohiro KOSAKI
@ 2011-11-09 23:10 ` Motohiro KOSAKI
  2011-11-10  3:46 ` [ruby-dev:44849] " Motohiro KOSAKI
                   ` (10 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-09 23:10 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


fcntl は全プラットフォーム int のようである。めでたい

== Linux
int fcntl(int fd, int cmd, ... /* arg */ );
https://www.kernel.org/doc/man-pages/online/pages/man2/fcntl.2.html

== FreeBSD
int  fcntl(int fd, int cmd, ...);
http://fuse4bsd.creo.hu/localcgi/man-cgi.cgi?fcntl+2

== NetBSD
int fcntl(int fd, int cmd, ...);
http://www.daemon-systems.org/man/fcntl.2.html     

== OpenBSD
int fcntl(int fd, int cmd, ...);
http://nixdoc.net/man-pages/OpenBSD/fcntl.2.html

== AIX
 int fcntl(int descriptor,
          int command,
          ...)  
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fapis%2Ffcntl.htm

== Solaris
int fcntl(int fildes, int cmd, /* arg */ ...);
http://download.oracle.com/docs/cd/E19963-01/html/821-1463/fcntl-2.html

== HP-UX
int fcntl(int fildes, int cmd, ... /* arg */);
http://nixdoc.net/man-pages/HP-UX/man2/fcntl.2.html

== Tru64
       int fcntl(
               int filedes,
               int request [,
               int argument |,
               struct flock *argument |,
               advfs_opT argument] ); int dup(
               int filedes ); int dup2(
               int old,
               int new );
http://nixdoc.net/man-pages/Tru64/man2/fcntl.2.html

== IRIX
int fcntl (int fildes, int	cmd, ... /* arg	*/);
http://nixdoc.net/man-pages/irix/man2/fcntl.2.html

== Darwin
int fcntl(int fildes, int cmd, ...);
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/fcntl.2.html
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Open
Priority: Low
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: -


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44849] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (2 preceding siblings ...)
  2011-11-09 23:10 ` [ruby-dev:44848] " Motohiro KOSAKI
@ 2011-11-10  3:46 ` Motohiro KOSAKI
  2011-11-12  9:52 ` [ruby-dev:44862] [Backport93 - Backport " Motohiro KOSAKI
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-10  3:46 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


よく見たら、fcntlのときに IOCPARM_LEN を呼んでるのはバグですね。ioctlのcmdしか IOCPARM_LEN でデコードできません。これが動くのはfcntlの引数にstring渡す人が一人もいなかったからでしょうね。
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Open
Priority: Low
Assignee: 
Category: core
Target version: 2.0.0
ruby -v: -


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44862] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (3 preceding siblings ...)
  2011-11-10  3:46 ` [ruby-dev:44849] " Motohiro KOSAKI
@ 2011-11-12  9:52 ` Motohiro KOSAKI
  2011-11-12 17:43 ` [ruby-dev:44863] " Motohiro KOSAKI
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-12  9:52 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


なかださんがミスを直してくれました。
r33724, r33727 も追加で。

----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Low
Assignee: Yuki Sonoda
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44863] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (4 preceding siblings ...)
  2011-11-12  9:52 ` [ruby-dev:44862] [Backport93 - Backport " Motohiro KOSAKI
@ 2011-11-12 17:43 ` Motohiro KOSAKI
  2011-11-14 14:56   ` [ruby-dev:44865] " Ayumu Aizawa
  2011-11-14 16:25 ` [ruby-dev:44866] " Tomoyuki Chikanaga
                   ` (7 subsequent siblings)
  13 siblings, 1 reply; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-12 17:43 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


Chikanaga さんのレビューコメントを反映し、r33728 をコミットしました。

----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Low
Assignee: Yuki Sonoda
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44865] Re: [Backport93 - Backport #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-11-12 17:43 ` [ruby-dev:44863] " Motohiro KOSAKI
@ 2011-11-14 14:56   ` Ayumu Aizawa
  0 siblings, 0 replies; 21+ messages in thread
From: Ayumu Aizawa @ 2011-11-14 14:56 UTC (permalink / raw
  To: ruby developers list

あいざわです

r33720で追加されたテストケースが Mac OSX SnowLeopardで失敗します。
以下のパッチ動くようにはなりますが、これってTempfile#openのバグなんでしょうか?

----
git diff --no-prefix
diff --git test/ruby/test_io.rb test/ruby/test_io.rb
index 6382cd7..e1ec389 100644
--- test/ruby/test_io.rb
+++ test/ruby/test_io.rb
@@ -1919,7 +1919,8 @@ End
   end

   def test_fcntl_dupfd
-    Tempfile.open(self.class.name) do |f|
+    Tempfile.new(self.class.name) do |f|
+      f.open
       fd = f.fcntl(Fcntl::F_DUPFD, 500)
       begin
         assert_equal(fd, 500)
----

= パッチあてるまえの実行結果
make test-all TESTS='test/ruby/test_io.rb'
./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext
-- --disable-gems "./test/runner.rb" --ruby="./miniruby -I./lib -I.
-I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems"
test/ruby/test_io.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common
./tool/runruby.rb --extout=.ext  -- --disable-gems"

# Running tests:

...........................................E...................................................................

Finished tests in 4.617944s, 24.0367 tests/s, 122.3488 assertions/s.

  1) Error:
test_fcntl_dupfd(TestIO):
Errno::EINVAL: Invalid argument -
/var/folders/uN/uN7thnp5EriPwEKPnKdfvk+++TI/-Tmp-/TestIO20111114-57558-itj964
    /users/ayumin/github/ruby/test/ruby/test_io.rb:1923:in `block in
test_fcntl_dupfd'

111 tests, 565 assertions, 0 failures, 1 errors, 0 skips

ruby -v: ruby 2.0.0dev (2011-11-14 trunk 33748) [x86_64-darwin10.8.0]
make: *** [yes-test-all] Error 1

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [ruby-dev:44866] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (5 preceding siblings ...)
  2011-11-12 17:43 ` [ruby-dev:44863] " Motohiro KOSAKI
@ 2011-11-14 16:25 ` Tomoyuki Chikanaga
  2011-11-14 16:41   ` [ruby-dev:44867] " KOSAKI Motohiro
  2011-11-14 17:19 ` [ruby-dev:44869] " Motohiro KOSAKI
                   ` (6 subsequent siblings)
  13 siblings, 1 reply; 21+ messages in thread
From: Tomoyuki Chikanaga @ 2011-11-14 16:25 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Tomoyuki Chikanaga.


あいざわさんのパッチだと、Tempfile.new がブロックを yield しないので、assert を通っていないだけのようです。

SnowLeopard の man fcntl によると

     [EINVAL]           Cmd is F_DUPFD and arg is negative or greater than the maximum allowable number (see getdtablesize(2)).

で getdtablesize() は 256 を返すのでとりあえず 500 -> 255 にすると通るようになりました。
500 というのは他の open 済みの fd と重複しない程度に大きな数字ということだと思うので、とりあえず 255 にしてしまってもいいでしょうか。ちゃんと空き fd を確保してそこに dup するようにしたほうがいいのかもしれませんが。

----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Low
Assignee: Yuki Sonoda
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44867] Re: [Backport93 - Backport #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-11-14 16:25 ` [ruby-dev:44866] " Tomoyuki Chikanaga
@ 2011-11-14 16:41   ` KOSAKI Motohiro
  2011-11-14 17:03     ` [ruby-dev:44868] " Ayumu Aizawa
  2011-11-14 23:59     ` [ruby-dev:44872] " Tanaka Akira
  0 siblings, 2 replies; 21+ messages in thread
From: KOSAKI Motohiro @ 2011-11-14 16:41 UTC (permalink / raw
  To: ruby developers list

2011年11月14日11:25 Tomoyuki Chikanaga <nagachika00@gmail•com>:
>
> Issue #5429 has been updated by Tomoyuki Chikanaga.
>
>
> あいざわさんのパッチだと、Tempfile.new がブロックを yield しないので、assert を通っていないだけのようです。
>
> SnowLeopard の man fcntl によると
>
>     [EINVAL]           Cmd is F_DUPFD and arg is negative or greater than the maximum allowable number (see getdtablesize(2)).
>
> で getdtablesize() は 256 を返すのでとりあえず 500 -> 255 にすると通るようになりました。
> 500 というのは他の open 済みの fd と重複しない程度に大きな数字ということだと思うので、とりあえず 255 にしてしまってもいいでしょうか。ちゃんと空き fd を確保してそこに dup するようにしたほうがいいのかもしれませんが。

うーん、あんまり凝ったことをするとまた別のOSの制限にひっかかるかもしれないので
255でお願いできるとうれしいなあ。
fcntlのテストが全然ないから追加したんだけど、ポータブルに動きそうなコマンドって
難しいのよねえ・・

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44868] Re: [Backport93 - Backport #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-11-14 16:41   ` [ruby-dev:44867] " KOSAKI Motohiro
@ 2011-11-14 17:03     ` Ayumu Aizawa
  2011-11-14 23:59     ` [ruby-dev:44872] " Tanaka Akira
  1 sibling, 0 replies; 21+ messages in thread
From: Ayumu Aizawa @ 2011-11-14 17:03 UTC (permalink / raw
  To: ruby developers list

近永さんありがとうございます。
r33753 でなおしておきました。

2011年11月15日1:41 KOSAKI Motohiro <kosaki.motohiro@gmail•com>:
> 2011年11月14日11:25 Tomoyuki Chikanaga <nagachika00@gmail•com>:
>>
>> Issue #5429 has been updated by Tomoyuki Chikanaga.
>>
>>
>> あいざわさんのパッチだと、Tempfile.new がブロックを yield しないので、assert を通っていないだけのようです。
>>
>> SnowLeopard の man fcntl によると
>>
>>     [EINVAL]           Cmd is F_DUPFD and arg is negative or greater than the maximum allowable number (see getdtablesize(2)).
>>
>> で getdtablesize() は 256 を返すのでとりあえず 500 -> 255 にすると通るようになりました。
>> 500 というのは他の open 済みの fd と重複しない程度に大きな数字ということだと思うので、とりあえず 255 にしてしまってもいいでしょうか。ちゃんと空き fd を確保してそこに dup するようにしたほうがいいのかもしれませんが。
>
> うーん、あんまり凝ったことをするとまた別のOSの制限にひっかかるかもしれないので
> 255でお願いできるとうれしいなあ。
> fcntlのテストが全然ないから追加したんだけど、ポータブルに動きそうなコマンドって
> 難しいのよねえ・・
>
>

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44869] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (6 preceding siblings ...)
  2011-11-14 16:25 ` [ruby-dev:44866] " Tomoyuki Chikanaga
@ 2011-11-14 17:19 ` Motohiro KOSAKI
  2012-02-06 19:56 ` [ruby-dev:45200] " Motohiro KOSAKI
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2011-11-14 17:19 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


これでバックポート対象に r33752, r33753 が追加ですね

----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
http://redmine.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Low
Assignee: Yuki Sonoda
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44872] Re: [Backport93 - Backport #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-11-14 16:41   ` [ruby-dev:44867] " KOSAKI Motohiro
  2011-11-14 17:03     ` [ruby-dev:44868] " Ayumu Aizawa
@ 2011-11-14 23:59     ` Tanaka Akira
  2011-11-15  1:43       ` [ruby-dev:44873] " KOSAKI Motohiro
  1 sibling, 1 reply; 21+ messages in thread
From: Tanaka Akira @ 2011-11-14 23:59 UTC (permalink / raw
  To: ruby developers list

2011年11月15日1:41 KOSAKI Motohiro <kosaki.motohiro@gmail•com>:

> うーん、あんまり凝ったことをするとまた別のOSの制限にひっかかるかもしれないので
> 255でお願いできるとうれしいなあ。

たしか OpenBSD のデフォルトの file descriptor limit はもっと少なかったような。

http://www.openbsd.org/cgi-bin/cvsweb/src/etc/login.conf.in?rev=1.5
http://www.openbsd.org/cgi-bin/cvsweb/src/etc/mklogin.conf?rev=1.6

によると 128 ですかね。
(履歴を見ると以前は 64 だった?)

それより小さくしといた方が面倒がないんじゃないでしょうか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:44873] Re: [Backport93 - Backport #5429]  64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-11-14 23:59     ` [ruby-dev:44872] " Tanaka Akira
@ 2011-11-15  1:43       ` KOSAKI Motohiro
  0 siblings, 0 replies; 21+ messages in thread
From: KOSAKI Motohiro @ 2011-11-15  1:43 UTC (permalink / raw
  To: ruby developers list

>> うーん、あんまり凝ったことをするとまた別のOSの制限にひっかかるかもしれないので
>> 255でお願いできるとうれしいなあ。
>
> たしか OpenBSD のデフォルトの file descriptor limit はもっと少なかったような。
>
> http://www.openbsd.org/cgi-bin/cvsweb/src/etc/login.conf.in?rev=1.5
> http://www.openbsd.org/cgi-bin/cvsweb/src/etc/mklogin.conf?rev=1.6
>
> によると 128 ですかね。
> (履歴を見ると以前は 64 だった?)
>
> それより小さくしといた方が面倒がないんじゃないでしょうか。

そのようにしました

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:45200] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (7 preceding siblings ...)
  2011-11-14 17:19 ` [ruby-dev:44869] " Motohiro KOSAKI
@ 2012-02-06 19:56 ` Motohiro KOSAKI
  2012-02-10  1:22 ` [ruby-dev:45223] " Yui NARUSE
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Motohiro KOSAKI @ 2012-02-06 19:56 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Motohiro KOSAKI.


思ったよりもパッチが大きくなったのと元報告者のKishimoto さんからFreeBSDでのフィードバックが得られていないので1.9.3ではrejectにしようかと考えています。ご意見お聞かせください

----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Low
Assignee: Yuki Sonoda
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:45223] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (8 preceding siblings ...)
  2012-02-06 19:56 ` [ruby-dev:45200] " Motohiro KOSAKI
@ 2012-02-10  1:22 ` Yui NARUSE
  2012-02-10  7:45 ` [ruby-dev:45228] " Makoto Kishimoto
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Yui NARUSE @ 2012-02-10  1:22 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Yui NARUSE.

Assignee changed from Yuki Sonoda to Makoto Kishimoto
Priority changed from Low to Normal


----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Normal
Assignee: Makoto Kishimoto
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:45228] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (9 preceding siblings ...)
  2012-02-10  1:22 ` [ruby-dev:45223] " Yui NARUSE
@ 2012-02-10  7:45 ` Makoto Kishimoto
  2012-02-10  7:54 ` [ruby-dev:45229] " Makoto Kishimoto
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 21+ messages in thread
From: Makoto Kishimoto @ 2012-02-10  7:45 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Makoto Kishimoto.


とりあえず今気づきましたというACKだけ。
特に何か「これは困る」というものではないので、
1.9.3へのバックポートは、なしで、私はかまいません。

trunkで問題が起きないことを確認すればいいんですよね?
(さて問題のスクリプトはハードディスクのどこだっけ……)
----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Normal
Assignee: Makoto Kishimoto
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:45229] [Backport93 - Backport #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (10 preceding siblings ...)
  2012-02-10  7:45 ` [ruby-dev:45228] " Makoto Kishimoto
@ 2012-02-10  7:54 ` Makoto Kishimoto
  2012-03-07  1:13 ` [ruby-dev:45315] [ruby-trunk - Bug " Makoto Kishimoto
  2013-11-19  1:46 ` [ruby-dev:47810] " naruse (Yui NARUSE)
  13 siblings, 0 replies; 21+ messages in thread
From: Makoto Kishimoto @ 2012-02-10  7:54 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Makoto Kishimoto.


確認しました。
最初の報告にあるような、ウォーニングシステムメッセージは出なくなっています。
クローズお願いします。
----------------------------------------
Backport #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Assigned
Priority: Normal
Assignee: Makoto Kishimoto
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:45315] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (11 preceding siblings ...)
  2012-02-10  7:54 ` [ruby-dev:45229] " Makoto Kishimoto
@ 2012-03-07  1:13 ` Makoto Kishimoto
  2013-11-19  1:46 ` [ruby-dev:47810] " naruse (Yui NARUSE)
  13 siblings, 0 replies; 21+ messages in thread
From: Makoto Kishimoto @ 2012-03-07  1:13 UTC (permalink / raw
  To: ruby developers list


Issue #5429 has been updated by Makoto Kishimoto.


たいして長くないので添付じゃなくインラインにしますが、

 SNDCTL_DSP_SPEED = 0xc0045002 - 0x1_0000_0000
 SNDCTL_DSP_STEREO = 0xc0045003 - 0x1_0000_0000
 SNDCTL_DSP_SETFMT = 0xc0045005 - 0x1_0000_0000
 
 AFMT_S16_LE = 0x00000010
 
 open("/dev/dsp", "w:ASCII-8BIT"){|dsp|
   ioarg = [AFMT_S16_LE].pack "i!"
   dsp.ioctl SNDCTL_DSP_SETFMT, ioarg
   ioarg = [44100].pack "i!"
   dsp.ioctl SNDCTL_DSP_SPEED, ioarg
   ioarg = [1].pack "i!"
   dsp.ioctl SNDCTL_DSP_STEREO, ioarg
 
   loop {
     buf = STDIN.read 4
     break unless buf
     buf.force_encoding "ASCII-8BIT"
     dsp.write buf
   }
 }

こんな感じです。CDからリップした、

 > track01.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz

こんな感じのwavを標準入力から食わせると音が出ます。
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429

Author: Makoto Kishimoto
Status: Closed
Priority: Normal
Assignee: Makoto Kishimoto
Category: 
Target version: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [ruby-dev:47810] [ruby-trunk - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
  2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
                   ` (12 preceding siblings ...)
  2012-03-07  1:13 ` [ruby-dev:45315] [ruby-trunk - Bug " Makoto Kishimoto
@ 2013-11-19  1:46 ` naruse (Yui NARUSE)
  13 siblings, 0 replies; 21+ messages in thread
From: naruse (Yui NARUSE) @ 2013-11-19  1:46 UTC (permalink / raw
  To: ruby-dev


Issue #5429 has been updated by naruse (Yui NARUSE).

ruby -v set to -

メモ: Linux の ioctl の manpage がなおったらしい
Linux's bug 
http://mkosaki.blog46.fc2.com/blog-entry-1246.html
----------------------------------------
Bug #5429: 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合
https://bugs.ruby-lang.org/issues/5429#change-43013

Author: metanest (Makoto Kishimoto)
Status: Closed
Priority: Normal
Assignee: metanest (Makoto Kishimoto)
Category: 
Target version: 
ruby -v: -
Backport: 


64ビットなFreeBSD 8において、ioctl(2)のプロトタイプ宣言は以下のように
なっていて、

int
ioctl(int d, unsigned long request, ...);

ビット31(32ビットであればMSB)が1なリクエストでも、上位ビットがゼロ拡張
された64ビット値を期待しています。

それに対しrubyのtrunkではIO#ioctlの引数の値の範囲は符号付き32ビットに
なっていて、最終的にio.cのnogvl_io_cntlに、intを引数としたioctlの
呼び出しがあり、ビット31が1なリクエストは符号拡張されて、ioctlを呼ぶことに
なり、

その結果システムメッセージに、(SNDCTL_DSP_SPEED の例)
WARNING pid 82043 (initial thread): ioctl sign-extension ioctl ffffffffc0045002
というようなウォーニングが出ます(一応目的の動作はしている)。

回避する修正は (unsigned) とキャストを入れればいいように思うのですが、
他のプラットフォームでの問題や、IO#ioctlの受け入れるべき引数の値の範囲の
問題などがあるので、とりあえずチケットのみ登録します。


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

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2013-11-19  2:15 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-09 15:39 [ruby-dev:44589] [Ruby 1.9 - Bug #5429][Open] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Makoto Kishimoto
2011-10-09 16:52 ` [ruby-dev:44590] [Ruby 1.9 - Bug #5429] 64ビットなFreeBSDのioctlでビット31が1なリクエストの時の不具合 Yui NARUSE
2011-10-09 19:38   ` [ruby-dev:44591] " KOSAKI Motohiro
2011-11-09 22:37 ` [ruby-dev:44847] [ruby-trunk " Motohiro KOSAKI
2011-11-09 23:10 ` [ruby-dev:44848] " Motohiro KOSAKI
2011-11-10  3:46 ` [ruby-dev:44849] " Motohiro KOSAKI
2011-11-12  9:52 ` [ruby-dev:44862] [Backport93 - Backport " Motohiro KOSAKI
2011-11-12 17:43 ` [ruby-dev:44863] " Motohiro KOSAKI
2011-11-14 14:56   ` [ruby-dev:44865] " Ayumu Aizawa
2011-11-14 16:25 ` [ruby-dev:44866] " Tomoyuki Chikanaga
2011-11-14 16:41   ` [ruby-dev:44867] " KOSAKI Motohiro
2011-11-14 17:03     ` [ruby-dev:44868] " Ayumu Aizawa
2011-11-14 23:59     ` [ruby-dev:44872] " Tanaka Akira
2011-11-15  1:43       ` [ruby-dev:44873] " KOSAKI Motohiro
2011-11-14 17:19 ` [ruby-dev:44869] " Motohiro KOSAKI
2012-02-06 19:56 ` [ruby-dev:45200] " Motohiro KOSAKI
2012-02-10  1:22 ` [ruby-dev:45223] " Yui NARUSE
2012-02-10  7:45 ` [ruby-dev:45228] " Makoto Kishimoto
2012-02-10  7:54 ` [ruby-dev:45229] " Makoto Kishimoto
2012-03-07  1:13 ` [ruby-dev:45315] [ruby-trunk - Bug " Makoto Kishimoto
2013-11-19  1:46 ` [ruby-dev:47810] " naruse (Yui NARUSE)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).