vfio: fix file descriptor leak in multi-process
authorPatrick MacArthur <patrick@patrickmacarthur.net>
Thu, 26 Jan 2017 23:05:21 +0000 (18:05 -0500)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Thu, 9 Feb 2017 17:39:30 +0000 (18:39 +0100)
commit811b6b25060f8b0ba32fd35af7c5f0354bd57a14
tree00aaf22dbf44b19793b700d1784820f2b6563309
parent42537ad1b983936755b0c4c36875551c493b5490
vfio: fix file descriptor leak in multi-process

When a secondary process wants access to the VFIO container file
descriptor, the primary process calls vfio_get_container_fd() which
always opens an entirely new file descriptor on /dev/vfio/vfio.
However, once the file descriptor has been passed to the subprocess, it
is effectively duplicated, meaning that the copy of the file descriptor
in the primary process is no longer needed.  However, the primary
process does not close the duplicate fd, which results in a resource
leak.

This can be reproduced by starting a primary process with a small
RLIMIT_NOFILE limit configured to use VFIO for at least one device, and
repeatedly launching secondary processes until the file descriptor limit
is exceeded.

Fix the resource leak by closing the local vfio container file
descriptor after passing it to the secondary process.

Fixes: 2f4adfad0a69 ("vfio: add multiprocess support")
Cc: stable@dpdk.org
Signed-off-by: Patrick MacArthur <patrick@patrickmacarthur.net>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/linuxapp/eal/eal_vfio_mp_sync.c