On Thu, Apr 23, 2026 at 20:15:16 +0200, Roman Bogorodskiy wrote:
> Currently, there are two (at least) issues in virBhyveProcessStop().
> 
> Before going into details, a quick overview of the bhyve shutdown
> process. It is a two stage process*: first, the main bhyve
> process gets destroyed (either via an external command or within the
> guest), then the resources need to be cleaned up using the bhyvectl(8)
> tool.
> 
> The first issue is that if virCommandRun() for bhyvectl(8) fails,
> virBhyveProcessStop() jumps to the 'cleanup' label and misses cleaning
> of some resources.
> 
> The second issue is more serious. Currently, monitor is closed only
> after running of the bhyvectl(8) command. That means that the monitor
> could catch the domain destroy event and try to run
> virBhyveProcessStop() on the same domain again, resulting in trying
> to release already released resources, such as the monitor itself.
> 
> Address by:
> 
>  * Making virCommandRun() on bhyvectl(8) non-critical. Even if it
>    fails, we try to clean up all resources. We consider the function
>    failed (return value 1) though.
> 
>  * Close monitor before running bhyvectl(8)
> 
> Additionally, do not verify that virBhyveProcessBuildDestroyCmd()
> returns non-NULL, there could be only allocation errors.

And with 'glib' they result in an abort() so no need to worry about
those.

> 
> Reported-by: Peter Krempa <[email protected]>
> Signed-off-by: Roman Bogorodskiy <[email protected]>
> ---
>  src/bhyve/bhyve_process.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)

Reviewed-by: Peter Krempa <[email protected]>

Reply via email to