On Fri, 31 Jul 2026 at 09:08, Bathija, Pravin <[email protected]> wrote:
> Internal Use - Confidential

It is not.

> > -----Original Message-----
> > From: David Marchand <[email protected]>
> > Sent: Thursday, July 30, 2026 11:22 PM
> > To: Bathija, Pravin <[email protected]>; [email protected]
> > Cc: [email protected]; [email protected];
> > [email protected]; [email protected]; [email protected]
> > Subject: Re: [PATCH v2 1/1] vhost: tolerate file descriptor in REM_MEM_REG
> > msg
> >
> >
> > [EXTERNAL EMAIL]
> >
> > 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...
> >
>
> Yes, the libblkio fix is ready and will be submitted upstream within a day or 
> so.
> It stops sending the fd with REM_MEM_REG.
>
> That said, this DPDK fix stands on its own regardless of libblkio. The 
> vhost-user
> specification explicitly anticipates this situation and requires back-ends to 
> handle it:
>
> "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."

Well, yes, I understand the specification was updated or written for a
buggy client :-)


> While the immediate motivation was libblkio, the spec's compatibility clause 
> was written for
> exactly this situation — any front-end could make the same mistake. QEMU's 
> libvhost-user
> reference implementation already tolerates it (see vu_rem_mem_reg).

Which does not change that I dislike such compat.


> The fix is 2 lines with no downside: accept the message, close the fd. 
> Rejecting it drops the
> connection entirely, which is a disproportionate response to a harmless extra 
> fd.

Leaving behind a "harmless extra fd" causes exhaustion of a process FD.
At least, CVE-2019-14818 and CVE-2020-10726 come to mind.

So strictly speaking, rejecting is really not disproportionate.


For now, drop the wrong RN update.


-- 
David Marchand

Reply via email to