On Fri, 31 Jul 2026 at 05:14, <[email protected]> wrote:
>
> From: Pravin M Bathija <[email protected]>
>
> The vhost-user specification (vhost-user.rst) states that no file
> descriptors SHOULD be passed with VHOST_USER_REM_MEM_REG.  However,
> it also says: "For compatibility with existing incorrect
> implementations, the back-end MAY accept messages with one file
> descriptor.  If a file descriptor is passed, the back-end MUST close
> it without using it otherwise."
>
> Some front-ends, notably libblkio, reuse the same message-building
> helper for both ADD_MEM_REG and REM_MEM_REG and unconditionally attach
> the mapping fd.  The previous implementation rejected any
> REM_MEM_REG carrying a file descriptor with the error:
>
>         expect 0 FDs for request VHOST_USER_REM_MEM_REG, received 1
>
> This broke teardown and memory region hot-swap with these front-ends.
>
> To reproduce, run any libblkio (v1.5.0) application using the
> virtio-blk-vhost-user driver against a DPDK vhost back-end.  The
> connection is dropped during cleanup or whenever a memory region is
> unmapped and remapped.

Is libblkio fixed now?

I am not a fan of such compatibility fix, having to accept one buggy client...

>
> QEMU's libvhost-user reference back-end (vu_rem_mem_reg) already
> tolerates zero or one fd in this message.  Align DPDK's behavior
> with both the specification's compatibility clause and the reference
> implementation by accepting the message and closing any unexpected fd.
>
> Tested with:
>  - QEMU VM bring-up with runtime add/remove memory regions via
>    QEMU monitor
>  - QEMU post-copy live migration between source and destination
>  - SPDK vhost-blk with libblkio (fio libblkio engine, write + md5
>    verify)
>  - libblkio alloc-mem-region and map-mem-region tests exercising
>    ADD_MEM_REG / REM_MEM_REG / ADD_MEM_REG cycles against SPDK
>    vhost-blk
>
> Fixes: 1d730eea6a42 ("vhost: add memory region handlers")
> Cc: [email protected]
>
> Signed-off-by: Pravin M Bathija <[email protected]>
> ---
>  doc/guides/rel_notes/release_26_07.rst | 8 ++++++++
>  lib/vhost/vhost_user.c                 | 9 ++++++++-
>  2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/doc/guides/rel_notes/release_26_07.rst 
> b/doc/guides/rel_notes/release_26_07.rst
> index 3d18ba2dd0..86042bd5e3 100644
> --- a/doc/guides/rel_notes/release_26_07.rst
> +++ b/doc/guides/rel_notes/release_26_07.rst

We are working on 26.*11* ...


> @@ -85,6 +85,14 @@ New Features
>    to support adding and removing memory regions without resetting
>    the whole guest memory map.
>
> +* **Fixed vhost REM_MEM_REG compatibility with front-ends sending file 
> descriptors.**
> +
> +  The vhost-user ``REM_MEM_REG`` message handler now tolerates
> +  an unexpected file descriptor sent by the front-end,
> +  closing it without use as permitted by the vhost-user specification.
> +  This fixes interoperability with front-ends such as libblkio
> +  that unconditionally attach a file descriptor to the message.
> +

... and regardless of the version this was put in, this is not a feature.

We usually don't put Fixes: in RN.
The AI bot nags too much.


-- 
David Marchand

Reply via email to