mitchellh / virtualbox

[ABANDONED] Create and modify virtual machines in VirtualBox using pure ruby.
http://mitchellh.github.com/virtualbox/
MIT License
245 stars 45 forks source link

null pointer dereference on Ubuntu #30

Closed flavorjones closed 14 years ago

flavorjones commented 14 years ago

Hi,

This is probably a question better-suited to a mailing list, but I couldn't find a reference to one, so here I am. :)

$ cat /etc/issue
Ubuntu 9.10 \n \l

$ gem list | fgrep virtualbox
virtualbox (0.6.1)

$ VBoxManage --version
3.0.12r54655

$ ps -ef | fgrep VBox
mike     16097 16083  0 06:42 ?        00:00:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
mike     16106     1  0 06:42 ?        00:00:01 /usr/lib/virtualbox/VBoxSVC --automate
mike     18670 18646  0 08:27 pts/2    00:00:00 fgrep VBox

$ irb -rubygems -rvirtualbox
irb(main):001:0> VirtualBox::VM.all
FFI::NullPointerError: invalid memory read at address=(nil)
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi/interface.rb:136:in `[]'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi/interface.rb:136:in `initialize_vtbl'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi/interface.rb:130:in `initialize'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/implementer/ffi.rb:18:in `new'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/implementer/ffi.rb:18:in `initialize'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/abstract_interface.rb:113:in `new'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/abstract_interface.rb:113:in `initialize'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi_interface.rb:60:in `new'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi_interface.rb:60:in `initialize_com'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi_interface.rb:43:in `initialize'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi_interface.rb:24:in `new'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/com/ffi_interface.rb:24:in `create'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/lib.rb:75:in `initialize'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/lib.rb:39:in `new'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/lib.rb:39:in `lib'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/global.rb:59:in `global'
    from /home/mike/.gem/ruby/1.8/gems/virtualbox-0.6.1/lib/virtualbox/vm.rb:138:in `all'

Dove in to the codes a bit and I can see that after the call to pfnComInitialize (in FFIInterface#initialize_com) the pointer value of virtualbox_ptr is NULL, which indicates to me that things aren't being initialized properly.

Any ideas?

mitchellh commented 14 years ago

Hi,

This is because VirtualBox gem only supports VirtualBox 3.1 and higher. I'll add a check soon to detect if you're using a VirtualBox version which isn't supported.

Mitchell

flavorjones commented 14 years ago

Ah! Thanks for the update. I don't think you need to auto-detect this, just document it. I couldn't find any mention of a minimum-version-requirement in the docs or the repo.

mitchellh commented 14 years ago

Right, well I think I'm going to throw an UnsupportedVirtualBoxVersion Exception or something along those lines. An additional note is that the OSE version is not supported either.

It needs to be >= 3.1 and not OSE.

warrickcustomhomes commented 14 years ago

Hmmm... I get this same error on Ubuntu and I'm using version 3.2.

$ lsb_release -d
Description:    Ubuntu 10.04 LTS

$ gem list | fgrep virtualbox
virtualbox (0.6.1)

$ VBoxManage --version
3.2.0r61806

Bryan

mitchellh commented 14 years ago

Bryan,

VirtualBox 0.6.1 only supports 3.1 =] The latest git version supports 3.2.

Sorry for the confusion.

Mitchell

mitchellh commented 14 years ago

I've added VirtualBox.supported? in the latest version of the gem so hopefully this will help people out. This method will tell you whether or not the installed (or not installed) version of VirtualBox is supported. I plan on integrating this into more parts of the gem as well.

http://github.com/mitchellh/virtualbox/commit/56606f2d6c328cd76010af2217b8ca4150a2e9d9