On Tue, 7 Apr 2026 22:42:04 +0000
<[email protected]> wrote:

> From: Pravin M Bathija <[email protected]>
> 
> These changes cover the function definition for add/remove memory
> region calls which are invoked on receiving vhost user message from
> vhost user front-end (e.g. Qemu). In our case, in addition to testing
> with qemu front-end, the testing has also been performed with libblkio
> front-end and spdk/dpdk back-end. We did I/O using libblkio based device
> driver, to spdk based drives. There are also changes for set_mem_table
> and new definition for get memory slots. Our changes optimize the set
> memory table call to use common support functions. Message get memory
> slots is how the vhost-user front-end queries the vhost-user back-end
> about the number of memory slots available to be registered by the
> back-end. In addition support function to invalidate vring is also
> defined which is used in add/remove memory region functions.
> 
> Signed-off-by: Pravin M Bathija <[email protected]>
> ---

The rest of the series review cleanly but AI flagged one issue.
The initial description was a mess. Asked it to be clearer.

## Review: PATCH v10 4/5 — vhost_user: Function defs for add/rem mem regions

**Warning: incomplete cleanup in `vhost_user_add_mem_reg()` mmap-failure path.**

What is wrong: when `vhost_user_mmap_region()` returns -1, the handler
only closes `reg->fd`. But `vhost_user_mmap_region()` can fail *after*
setting `reg->mmap_addr`/`mmap_size`/`host_user_addr` and after
`add_guest_pages()` has appended entries (the `add_one_guest_page()`
realloc path).

Impact: leaked mmap and stale `dev->guest_pages` entries. Since
`nregions` is not incremented, the next ADD_MEM_REG reuses the same
slot and overwrites `mmap_addr`, so `free_all_mem_regions()` can no
longer reach the original mapping.

Fix: when `reg->mmap_addr` is set, take the `free_new_region` path
(`remove_guest_pages()` + `free_mem_region(reg)`) instead of just
`close(reg->fd)`. Keep the explicit `close()` for the case where
`mmap()` itself failed before `mmap_addr` was assigned.

Reply via email to