On Wed, Jul 29, 2026 at 12:12:48PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> As documented, for "local", the migration channel must be direct
> UNIX socket connection from source to target. We can't check for
> it being "direct", but let's at least check that we deal with
> UNIX socket (fd-passing supported).
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
> ---
>  migration/channel.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/migration/channel.c b/migration/channel.c
> index 1e2935f926b..537673c29e9 100644
> --- a/migration/channel.c
> +++ b/migration/channel.c
> @@ -214,6 +214,13 @@ void migration_channel_process_incoming(QIOChannel *ioc)
>      trace_migration_set_incoming_channel(
>          ioc, object_get_typename(OBJECT(ioc)));
>  
> +    if (migrate_local() && migrate_mode() != MIG_MODE_CPR_EXEC &&
> +        !qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_FD_PASS)) {
> +        error_setg(&local_err,
> +                   "local migration requires a UNIX domain socket channel");
> +        goto out;
> +    }
> +
>      if (migrate_channel_requires_tls_upgrade(ioc)) {
>          migration_tls_channel_process_incoming(ioc, &local_err);
>      } else {
> @@ -241,6 +248,16 @@ void migration_channel_connect_outgoing(MigrationState 
> *s, QIOChannel *ioc)
>  {
>      trace_migration_set_outgoing_channel(ioc, 
> object_get_typename(OBJECT(ioc)));
>  
> +    if (migrate_local() && migrate_mode() != MIG_MODE_CPR_EXEC &&
> +        !qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_FD_PASS)) {
> +        Error *local_err = NULL;
> +
> +        error_setg(&local_err,
> +                   "local migration requires a UNIX domain socket channel");
> +        migration_connect_error_propagate(s, local_err);
> +        return;
> +    }
> +

We only need to touch migration_capabilities_and_transport_compatible()?
It should work for both, and fail QMP commands directly might also be
slightly better.

>      if (migrate_channel_requires_tls_upgrade(ioc)) {
>          Error *local_err = NULL;
>  
> -- 
> 2.43.0
> 

-- 
Peter Xu


Reply via email to