diff options
author | Alex Williamson <alex.williamson@redhat.com> | 2018-05-11 09:05:02 -0600 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2018-06-08 10:21:39 -0600 |
commit | 48d8476b41eed63567dd2f0ad125c895b9ac648a (patch) | |
tree | 02a6fd308233b40ba26b05234c7e05dcd847d961 /samples | |
parent | 29dcea88779c856c7dc92040a0c01233263101d4 (diff) | |
download | linux-48d8476b41eed63567dd2f0ad125c895b9ac648a.tar.gz linux-48d8476b41eed63567dd2f0ad125c895b9ac648a.tar.bz2 linux-48d8476b41eed63567dd2f0ad125c895b9ac648a.zip |
vfio/type1: Fix task tracking for QEMU vCPU hotplug
MAP_DMA ioctls might be called from various threads within a process,
for example when using QEMU, the vCPU threads are often generating
these calls and we therefore take a reference to that vCPU task.
However, QEMU also supports vCPU hotplug on some machines and the task
that called MAP_DMA may have exited by the time UNMAP_DMA is called,
resulting in the mm_struct pointer being NULL and thus a failure to
match against the existing mapping.
To resolve this, we instead take a reference to the thread
group_leader, which has the same mm_struct and resource limits, but
is less likely exit, at least in the QEMU case. A difficulty here is
guaranteeing that the capabilities of the group_leader match that of
the calling thread, which we resolve by tracking CAP_IPC_LOCK at the
time of calling rather than at an indeterminate time in the future.
Potentially this also results in better efficiency as this is now
recorded once per MAP_DMA ioctl.
Reported-by: Xu Yandong <xuyandong2@huawei.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'samples')
0 files changed, 0 insertions, 0 deletions