Skip to content

Commit

Permalink
vfio: fix duplicated user mem map
Browse files Browse the repository at this point in the history
Currently, new user mem maps are checked if they are adjacent to
an existing mem map and if so, the mem map entries are merged.

It didn't check for duplicate mem maps, so if the API is called
with the same mem map multiple times, they will occupy multiple
mem map entries. This will reduce the amount of entries available
for unique mem maps.

So check for duplicate mem maps and merge them into one mem map
entry if any found.

Fixes: 0cbce3a ("vfio: skip DMA map failure if already mapped")
Cc: stable@dpdk.org

Suggested-by: Kevin Traynor <ktraynor@redhat.com>
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
  • Loading branch information
wyjwang authored and tmonjalo committed Apr 19, 2021
1 parent 1cd3ce0 commit 22677b0
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/librte_eal/linux/eal_vfio.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,18 @@ adjust_map(struct user_mem_map *src, struct user_mem_map *end,
static int
merge_map(struct user_mem_map *left, struct user_mem_map *right)
{
/* merge the same maps into one */
if (memcmp(left, right, sizeof(struct user_mem_map)) == 0)
goto out;

if (left->addr + left->len != right->addr)
return 0;
if (left->iova + left->len != right->iova)
return 0;

left->len += right->len;

out:
memset(right, 0, sizeof(*right));

return 1;
Expand Down

0 comments on commit 22677b0

Please sign in to comment.