From: Demi Marie Obenour <demiobenour@gmail.com>
To: Alyssa Ross <hi@alyssa.is>
Cc: Spectrum OS Development <devel@spectrum-os.org>
Subject: Re: Networking test runs run-vmm twice with the same VM ID
Date: Thu, 16 Jul 2026 16:14:28 -0400 [thread overview]
Message-ID: <117eba13-ffa5-4675-9097-b466fd5d7d16@gmail.com> (raw)
In-Reply-To: <87h5lze3s1.fsf@alyssa.is>
[-- Attachment #1.1: Type: text/plain, Size: 3196 bytes --]
On 7/16/26 04:29, Alyssa Ross wrote:
> Demi Marie Obenour <demiobenour@gmail.com> writes:
>
>> The networking test runs run-vmm twice with the same VM ID.
>> If it waits for the previous cgroup to be empty, the second
>> call waits forever.
>>
>> Is this expected? I would expect that run-vmm is only called
>> once.
>
> Assuming you mean run twice in sequence, rather than run twice at the
> same time, then yes, it is expected.
>
> The way it works at the moment is that imported VMs have a VM ID
> assigned when they're imported, and they can then be started any number
> of times. When the VM shuts down, the VMM exits, so if the VM is
> started again after that, run-vmm will be run again with the same VM ID.
> If this were not the case, VM IDs could not be assigned at import time,
> and stay the same between successive boots of the same VM.
>
> If your cgroup is not being emptied as expected, that is a bug,
> regardless of whether it ends up being used again, because there
> shouldn't be lingering processes or cgroups hanging around forever.
> It sounds like we should have a test that confirms that this doesn't
> happen, if it's hard to get right.
>
> The networking test does do something slightly unusual, which is that it
> restarts the VMM with s6-svc -Wr -r, rather than e.g. via the Cloud
> Hypervisor API. I would expect that this runs the finish script, but
> might be worth confirming.
It does indeed run the finish script!
It appears there are likely two or more bugs. The first is that
sending a signal to the run-vmm process itself is insufficient:
it leaves child processes behind. I don't know why that is. Is it
something you could figure out?
The second bug was that the finish script purged the wrong cgroup.
It tried to purge /vmm, which doesn't exist. Purging a nonexistent
cgroup is a (intentionally) a no-op, so the finish script failed to
do anything.
Because of these two problems, there were still processes left in the
cgroup when run-vmm ran again. Therefore, cgroup-setup was waiting
for them to exit, which never happened.
I haven't fixed the first problem, but I did fix the second. However,
this caused /run/vsock/${1}/vsock to be left behind. I suspect this
is because cgroup-setup sends SIGKILL, so Cloud Hypervisor never gets
to unlink the socket. This caused Cloud Hypervisor to fail to restart.
To solve *that* problem, I had to add `rm -f /run/vsock/${1}/vsock`
to run-vmm. Fortunately, this is safe against symlink attacks: the
VMM has no write access to /run/vsock/${1}, so it can't turn that
into a symlink, and rm doesn't follow symlinks in the file it is told
to delete.
Once I added the rm call, the tests passed!
This means that the Rust code was actually working fine, and that the
way it waits for processes to exit works properly. The problem was
in the surrounding execline scripting. While the Rust code *was*
missing locking, that was not the cause of any of the problems in
the test suite.
Do you have suggestions for fixing run-vmm and/or preventing similar
problems in the future?
--
Sincerely,
Demi Marie Obenour (she/her/hers)
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-07-16 20:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-15 23:36 Networking test runs run-vmm twice with the same VM ID Demi Marie Obenour
2026-07-16 8:29 ` Alyssa Ross
2026-07-16 19:01 ` Demi Marie Obenour
2026-07-21 16:00 ` Alyssa Ross
2026-07-16 20:14 ` Demi Marie Obenour [this message]
2026-07-16 21:31 ` Demi Marie Obenour
2026-07-21 16:03 ` Alyssa Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=117eba13-ffa5-4675-9097-b466fd5d7d16@gmail.com \
--to=demiobenour@gmail.com \
--cc=devel@spectrum-os.org \
--cc=hi@alyssa.is \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
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 NNTP newsgroup(s).