Forum: Ruby-dev [ruby-trunk - Bug #7597][Open] $0を変更するとbug reportでsegvする

Posted by tarui (Masaya Tarui) (Guest)
on 2012-12-21 12:15
(Received via mailing list)
Issue #7597 has been reported by tarui (Masaya Tarui).

----------------------------------------
Bug #7597: $0を変更するとbug_reportでsegvする
https://bugs.ruby-lang.org/issues/7597

Author: tarui (Masaya Tarui)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]


rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が 
ruby本体の代わりに$0で変更した名前を引っ張って来ています。
それがrb_dump_backtrace_with_lines(n, trace, 
syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、
正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。

minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。
例えば[Bug #7590]。

抜本的な対策はまだよくわからないのですが、一時的に、
rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。


$ cat t.rb
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 
#dummy header:-)
$0=__FILE__
require 'dl'
p DL::CPtr.new(4)[0]

$ ruby t.rb
DL is deprecated, please use Fiddle
t.rb:4: [BUG] Segmentation fault
ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]

-- Control frame information 
-----------------------------------------------
c:0003 p:---- s:0009 e:000008 CFUNC  :[]
c:0002 p:0033 s:0005 e:001578 EVAL   t.rb:4 [FINISH]
c:0001 p:0000 s:0002 e:000c08 TOP    [FINISH]

t.rb:4:in `<main>'
t.rb:4:in `[]'

-- C level backtrace information 
-------------------------------------------
Segmentation fault (core dumped)
$
Posted by tarui (Masaya Tarui) (Guest)
on 2012-12-21 12:28
(Received via mailing list)
Issue #7597 has been updated by tarui (Masaya Tarui).


$ cat ruby
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
require 'dl'
p DL::CPtr.new(4)[0]
で
$ ruby ruby
としただけで同様でした。

どなたか rb_dump_backtrace_with_lines を直せますか?
----------------------------------------
Bug #7597: $0を変更するとbug_reportでsegvする
https://bugs.ruby-lang.org/issues/7597#change-34931

Author: tarui (Masaya Tarui)
Status: Open
Priority: Normal
Assignee:
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]


rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が 
ruby本体の代わりに$0で変更した名前を引っ張って来ています。
それがrb_dump_backtrace_with_lines(n, trace, 
syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、
正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。

minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。
例えば[Bug #7590]。

抜本的な対策はまだよくわからないのですが、一時的に、
rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。


$ cat t.rb
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 
#dummy header:-)
$0=__FILE__
require 'dl'
p DL::CPtr.new(4)[0]

$ ruby t.rb
DL is deprecated, please use Fiddle
t.rb:4: [BUG] Segmentation fault
ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]

-- Control frame information 
-----------------------------------------------
c:0003 p:---- s:0009 e:000008 CFUNC  :[]
c:0002 p:0033 s:0005 e:001578 EVAL   t.rb:4 [FINISH]
c:0001 p:0000 s:0002 e:000c08 TOP    [FINISH]

t.rb:4:in `<main>'
t.rb:4:in `[]'

-- C level backtrace information 
-------------------------------------------
Segmentation fault (core dumped)
$
Posted by ko1 (Koichi Sasada) (Guest)
on 2012-12-21 12:54
(Received via mailing list)
Issue #7597 has been updated by ko1 (Koichi Sasada).

Assignee set to tarui (Masaya Tarui)


----------------------------------------
Bug #7597: $0を変更するとbug_reportでsegvする
https://bugs.ruby-lang.org/issues/7597#change-34935

Author: tarui (Masaya Tarui)
Status: Open
Priority: Normal
Assignee: tarui (Masaya Tarui)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]


rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が 
ruby本体の代わりに$0で変更した名前を引っ張って来ています。
それがrb_dump_backtrace_with_lines(n, trace, 
syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、
正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。

minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。
例えば[Bug #7590]。

抜本的な対策はまだよくわからないのですが、一時的に、
rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。


$ cat t.rb
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 
#dummy header:-)
$0=__FILE__
require 'dl'
p DL::CPtr.new(4)[0]

$ ruby t.rb
DL is deprecated, please use Fiddle
t.rb:4: [BUG] Segmentation fault
ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]

-- Control frame information 
-----------------------------------------------
c:0003 p:---- s:0009 e:000008 CFUNC  :[]
c:0002 p:0033 s:0005 e:001578 EVAL   t.rb:4 [FINISH]
c:0001 p:0000 s:0002 e:000c08 TOP    [FINISH]

t.rb:4:in `<main>'
t.rb:4:in `[]'

-- C level backtrace information 
-------------------------------------------
Segmentation fault (core dumped)
$
Posted by tarui (Masaya Tarui) (Guest)
on 2012-12-21 13:22
(Received via mailing list)
Issue #7597 has been updated by tarui (Masaya Tarui).

Status changed from Closed to Feedback
Priority changed from Normal to Low

担当者を振られたのでとりあえず、
rb_dump_backtrace_with_lines
を呼び出す部分をコメントアウトしておきました。

patch welcomeです。
----------------------------------------
Bug #7597: $0を変更するとbug_reportでsegvする
https://bugs.ruby-lang.org/issues/7597#change-34938

Author: tarui (Masaya Tarui)
Status: Feedback
Priority: Low
Assignee: tarui (Masaya Tarui)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]


rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が 
ruby本体の代わりに$0で変更した名前を引っ張って来ています。
それがrb_dump_backtrace_with_lines(n, trace, 
syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、
正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。

minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。
例えば[Bug #7590]。

抜本的な対策はまだよくわからないのですが、一時的に、
rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。


$ cat t.rb
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 
#dummy header:-)
$0=__FILE__
require 'dl'
p DL::CPtr.new(4)[0]

$ ruby t.rb
DL is deprecated, please use Fiddle
t.rb:4: [BUG] Segmentation fault
ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]

-- Control frame information 
-----------------------------------------------
c:0003 p:---- s:0009 e:000008 CFUNC  :[]
c:0002 p:0033 s:0005 e:001578 EVAL   t.rb:4 [FINISH]
c:0001 p:0000 s:0002 e:000c08 TOP    [FINISH]

t.rb:4:in `<main>'
t.rb:4:in `[]'

-- C level backtrace information 
-------------------------------------------
Segmentation fault (core dumped)
$
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2012-12-21 18:22
(Received via mailing list)
Issue #7597 has been updated by kosaki (Motohiro KOSAKI).


なんか、Linux固有バグらしいのでたまにはメンテナの真似事らしきことをしてみました
----------------------------------------
Bug #7597: $0を変更するとbug_reportでsegvする
https://bugs.ruby-lang.org/issues/7597#change-34997

Author: tarui (Masaya Tarui)
Status: Closed
Priority: Low
Assignee: tarui (Masaya Tarui)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]


rb_vm_bugreport(void)の中で backtrace_symbols(trace, n)が 
ruby本体の代わりに$0で変更した名前を引っ張って来ています。
それがrb_dump_backtrace_with_lines(n, trace, 
syms);の中でelf形式の実行ファイルだと思い込んで処理をしてしまっており、
正しく処理されずに誤ったヘッダー情報を元にポインタ操作を行いsegv等します。

minitest中にsegvしたりrb_bugしたりすると、思いっきりこれをふむ事になります。
例えば[Bug #7590]。

抜本的な対策はまだよくわからないのですが、一時的に、
rb_dump_backtrace_with_linesを使わないようにしておくべきかなと思います。


$ cat t.rb
"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" 
#dummy header:-)
$0=__FILE__
require 'dl'
p DL::CPtr.new(4)[0]

$ ruby t.rb
DL is deprecated, please use Fiddle
t.rb:4: [BUG] Segmentation fault
ruby 2.0.0dev (2012-12-21 trunk 38514) [x86_64-linux]

-- Control frame information 
-----------------------------------------------
c:0003 p:---- s:0009 e:000008 CFUNC  :[]
c:0002 p:0033 s:0005 e:001578 EVAL   t.rb:4 [FINISH]
c:0001 p:0000 s:0002 e:000c08 TOP    [FINISH]

t.rb:4:in `<main>'
t.rb:4:in `[]'

-- C level backtrace information 
-------------------------------------------
Segmentation fault (core dumped)
$
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.