Bug 236616

Summary: emulators/virtualbox-ose: Unable to create a new machine due to "Unexpected exception: cxxrt::bad_alloc [St9bad_alloc]"
Product: Ports & Packages Reporter: Mateusz Piotrowski <0mp>
Component: Individual Port(s)Assignee: vbox
Status: Open ---    
Severity: Affects Some People CC: 0mp, cy, dim, grahamperrin, jkim, kevans, madpilot, swills, w.schwarzenfeld, wulf
Priority: --- Keywords: regression
Version: LatestFlags: bugzilla: maintainer-feedback? (vbox)
Hardware: Any   
OS: Any   
Bug Depends on: 244603    
Bug Blocks: 244847    
Attachments:
Description Flags
Use type_traits to unbreak runtime issues none

Description Mateusz Piotrowski freebsd_committer 2019-03-18 11:41:49 UTC
I'm getting the following error when trying to create a new virtual machine. The exact moment I get this error message is when I click "Create" in the "Hard disk" dialog during the creation process of a new machine. The VirtualBox application does not crash: it just does not allow me to create a new machine. Existing machines seem to work fine.

> Failed to create a new virtual machine.
> 
> Unexpected exception: cxxrt::bad_alloc [St9bad_alloc]
> 
> /wrkdirs/usr/ports/emulators/virtualbox-ose/work/VirtualBox-5.2.26/out/freebsd.amd64/release/obj/VBoxAPIWrap/VirtualBoxWrap.cpp[1323] (virtual nsresult VirtualBoxWrap::CreateMachine(CBSTR, CBSTR, PRUint32, CBSTR *, CBSTR, CBSTR, IMachine **)).
> 
> Result Code: NS_ERROR_FAILURE (0x80004005)
> Component: VirtualBoxWrap
> Interface: IVirtualBox {9570b9d5-f1a1-448a-10c5-e12f5285adad}

I'm running  FreeBSD 13.0-CURRENT r345136 GENERIC amd64 with virtualbox-ose-5.2.26_3.

Let me know if I can
Comment 1 Mateusz Piotrowski freebsd_committer 2019-03-18 11:42:22 UTC
Let me know if I can provide any help with debugging.
Comment 2 Mateusz Piotrowski freebsd_committer 2019-03-20 09:58:27 UTC
Here are some additional error messages I get when running "vagrant up" to create a new machine:

> There was an error while executing `VBoxManage`, a CLI used by Vagrant
> for controlling VirtualBox. The command and stderr is shown below.
> 
> Command: ["import", "-n", "/home/0mp/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-bionic64/20190219.0.0/virtualbox/box.ovf"]
> 
> Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
> Interpreting /home/0mp/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-bionic64/20190219.0.0/virtualbox/box.ovf...
> OK.
> VBoxManage: error: Output argument aExtraConfigValues points to invalid memory location (0000000000000000)
> VBoxManage: error: Details: code NS_ERROR_INVALID_POINTER (0x80004003), component VirtualSystemDescriptionWrap, interface IVirtualSystemDescription, callee nsISupports
> VBoxManage: error: Context: "GetDescription(ComSafeArrayAsOutParam(retTypes), ComSafeArrayAsOutParam(aRefs), ComSafeArrayAsOutParam(aOvfValues), ComSafeArrayAsOutParam(aVBoxValues), ComSafeArrayAsOutParam(aExtraConfigValues))" at line 387 of file VBoxManageAppliance.cpp

Tested on FreeBSD 13.0-CURRENT r345294 GENERIC amd64, vagrant-2.2.4_1, virtualbox-ose-5.2.26_3.
Comment 3 Vladimir Kondratyev freebsd_committer 2019-03-30 00:38:19 UTC
> Unexpected exception: cxxrt::bad_alloc [St9bad_alloc]

I have got the same error.

Building with clang70 from ports fixed it for me.
Comment 4 Steve Wills freebsd_committer 2019-04-01 17:36:45 UTC
(In reply to Vladimir Kondratyev from comment #3)
Confirmed, building with clang70 from ports fixed it for me as well.
Comment 5 Dimitry Andric freebsd_committer 2019-04-01 17:56:00 UTC
(In reply to Mateusz Piotrowski from comment #1)
> Let me know if I can provide any help with debugging.

Can you try to get a stack trace for the exception?

E.g. by running the thing in gdb, and using "catch throw" to catch the exception first-chance, and when it is hit, run "bt".
Comment 6 Mateusz Piotrowski freebsd_committer 2019-04-02 10:45:59 UTC
(In reply to Dimitry Andric from comment #5)
Well, VirtualBox is not crashing on my machine. Those are the virtual machines inside VirtualBox that are affected.
Comment 7 Dimitry Andric freebsd_committer 2019-04-02 19:21:11 UTC
(In reply to Mateusz Piotrowski from comment #2)
> Here are some additional error messages I get when running "vagrant up" to
> create a new machine:
> 
> > There was an error while executing `VBoxManage`, a CLI used by Vagrant
> > for controlling VirtualBox. The command and stderr is shown below.
> > 
> > Command: ["import", "-n", "/home/0mp/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-bionic64/20190219.0.0/virtualbox/box.ovf"]
> > 
> > Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
> > Interpreting /home/0mp/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-bionic64/20190219.0.0/virtualbox/box.ovf...
> > OK.
> > VBoxManage: error: Output argument aExtraConfigValues points to invalid memory location (0000000000000000)
> > VBoxManage: error: Details: code NS_ERROR_INVALID_POINTER (0x80004003), component VirtualSystemDescriptionWrap, interface IVirtualSystemDescription, callee nsISupports
> > VBoxManage: error: Context: "GetDescription(ComSafeArrayAsOutParam(retTypes), ComSafeArrayAsOutParam(aRefs), ComSafeArrayAsOutParam(aOvfValues), ComSafeArrayAsOutParam(aVBoxValues), ComSafeArrayAsOutParam(aExtraConfigValues))" at line 387 of file VBoxManageAppliance.cpp
> 
> Tested on FreeBSD 13.0-CURRENT r345294 GENERIC amd64, vagrant-2.2.4_1,
> virtualbox-ose-5.2.26_3.

I can reproduce these, but I have no clue what causes it. The code is hard to follow due to all the macros and object interfacing... It doesn't throw here, at least, so I don't see any bad_alloc exceptions.
Comment 8 Guido Falsi freebsd_committer 2019-04-07 08:56:14 UTC
Hi,

I'm seeing this too, but with a strange twist.

I have a laptop and a desktop machine both running the same FreeBSD version (13 r345473 at present), I'm using packaged base and both machines use the exact same package set, for both base and ports.

Virtualbox was working fine on both, I am now reinstalling the desktop machine from scratch.

Virtualbox keeps working fine on the laptop, also being able to create new VMs.

On the reinstalled desktop machine instead, launching it from scratch (no configuration here) it fails with the reported error when trying to create a new VM.

This is really strange IMHO, since the two machines are running the exact same binaries.

Could be configuration related, or caused by some dependency?

I'm now going to force the rebuild of the virtualbox packages, just in case.

After this I could force virtualbox to be rebuilt using clang 6 or clang 7.
Comment 9 Guido Falsi freebsd_committer 2019-04-07 09:24:14 UTC
For further information, recovering the old .VirtualBox directory reproduced the old setup, and I'm able to launch and use normally the old VMs, but if I try to create a new one the error persists.
Comment 10 Guido Falsi freebsd_committer 2019-04-07 16:16:36 UTC
I'd also like to confirm that compiling virtualbox with clang/llvm 7.0 makes it work again.
Comment 11 Jung-uk Kim freebsd_committer 2019-04-10 01:19:49 UTC
Created attachment 203549 [details]
Use type_traits to unbreak runtime issues

Can you please try this patch *with* Clang 8, i.e., default compiler?
Comment 12 Guido Falsi freebsd_committer 2019-04-10 17:20:09 UTC
(In reply to Jung-uk Kim from comment #11)
> Created attachment 203549 [details]
> Use type_traits to unbreak runtime issues
> 
> Can you please try this patch *with* Clang 8, i.e., default compiler?

I recompiled applying your patch using the default clang 8 (the system compiler) but I get the same error when trying to create a new VM.
Comment 13 Guido Falsi freebsd_committer 2019-04-10 19:17:15 UTC
(In reply to Guido Falsi from comment #12)
> (In reply to Jung-uk Kim from comment #11)
> > Created attachment 203549 [details]
> > Use type_traits to unbreak runtime issues
> > 
> > Can you please try this patch *with* Clang 8, i.e., default compiler?
> 
> I recompiled applying your patch using the default clang 8 (the system
> compiler) but I get the same error when trying to create a new VM.

Actually now that I'm running with this patched version I'm seeing VMs crashing after some time they run.

Not sure if this is caused by the patch. I'll report back if reverting to virtualbox compiled with clang 7.0 makes the crashes disappear.
Comment 14 commit-hook freebsd_committer 2019-04-10 20:47:51 UTC
A commit references this bug:

Author: jkim
Date: Wed Apr 10 20:47:24 UTC 2019
New revision: 498595
URL: https://svnweb.freebsd.org/changeset/ports/498595

Log:
  Apply a bandaid to work around runtime issues with Clang 8.0.

  PR:		236616

Changes:
  head/emulators/virtualbox-ose/Makefile
Comment 15 Jung-uk Kim freebsd_committer 2019-04-10 20:50:21 UTC
(In reply to Guido Falsi from comment #13)
Okay, sorry for the noise.  It will take some time to figure out what's really going on here.  For now, we're falling back to devel/llvm60 on head.
Comment 16 Guido Falsi freebsd_committer 2019-04-10 21:07:07 UTC
(In reply to Jung-uk Kim from comment #15)
> (In reply to Guido Falsi from comment #13)
> Okay, sorry for the noise.  It will take some time to figure out what's
> really going on here.  For now, we're falling back to devel/llvm60 on head.

Nothing to be sorry about. Thanks for trying to fix it!
Comment 17 Mateusz Piotrowski freebsd_committer 2019-04-11 12:27:14 UTC
(In reply to commit-hook from comment #14)

This change does help. Thanks.
Comment 18 Walter Schwarzenfeld freebsd_triage 2019-08-29 16:59:35 UTC
if I understand right, it seems fixed. Can we close here?
Comment 19 Guido Falsi freebsd_committer 2019-09-02 08:24:17 UTC
(In reply to Walter Schwarzenfeld from comment #18)

> if I understand right, it seems fixed. Can we close here?

IMHO yes, the problem is solved now that the port uses clang/llvm 6.0

I'm not sure what can be done for using a newer compiler.
Comment 20 Kyle Evans freebsd_committer 2020-03-03 02:13:38 UTC
Re-opening... pinning virtualbox to an old compiler isn't really a sustainable solution, unfortunately, as that potentially (as in, right now) holds back real improvements to base that require newer compilers. We really need to work out why the newer versions aren't working or force it over to GCC until we can do so, if that's feasible.
Comment 21 Guido Falsi freebsd_committer 2020-03-04 17:40:04 UTC
Due to being pinned to olgd clang virtualbox is now failing to build on head after r358439

As a workaround I've added this to make.conf in poudriere:


.if ${.CURDIR:M*emulators/virtualbox-ose}
USE_GCC=9
.endif

and so building virtualbox with recent gcc. It works fine for me.
Comment 22 Graham Perrin 2020-03-23 02:46:40 UTC
(In reply to Guido Falsi from comment #21)

This path, yes? 

/usr/local/etc/poudriere.d/make.conf
Comment 23 Guido Falsi freebsd_committer 2020-03-23 08:51:34 UTC
(In reply to Graham Perrin from comment #22)

> This path, yes? 
>
> /usr/local/etc/poudriere.d/make.conf

for poudriere yes, or a more specific one if you want it to apply only to certain builds, anyway it is not necessary anymore, the head of the ports tree already has USE_GCC in it.
Comment 24 Graham Perrin 2020-03-23 16:53:20 UTC
No go for me with 5.2.34_1

----

grahamperrin@momh167-gjp4-8570p:~ % date ; uname -v
Mon 23 Mar 2020 15:44:28 GMT
FreeBSD 13.0-CURRENT #0 r359068: Wed Mar 18 21:14:12 GMT 2020     root@momh167-gjp4-8570p:/usr/obj/usr/src/amd64.amd64/sys/GENERIC-NODEBUG 
grahamperrin@momh167-gjp4-8570p:~ % virtualbox
Segmentation fault
grahamperrin@momh167-gjp4-8570p:~ % pkg query '%o %v %R' virtualbox-ose virtualbox-ose-kmod
emulators/virtualbox-ose 5.2.34_1 poudriere
emulators/virtualbox-ose-kmod 5.2.34 poudriere
grahamperrin@momh167-gjp4-8570p:~ % 

----

Do I shoot myself in the foot with one of the three lines below?

root@momh167-gjp4-8570p:~ # grep -v \# /usr/local/etc/poudriere.d/make.conf
WITHOUT_LLVM_TARGET_ALL=
MESA_LLVM_VER=${LLVM_DEFAULT}
DEFAULT_VERSIONS+=llvm=10

----

Incidentally I see 5.2.34_1 for two commits, the first of which was in February, at <https://www.freshports.org/emulators/virtualbox-ose/>
Comment 25 Graham Perrin 2020-03-23 18:08:03 UTC
Sorry, disoriented. My previous comment (segmentation fault) probably belonged under bug 244847