summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWhi copybara merger <whitechapel-automerger@google.com>2023-06-05 18:11:15 +0000
committerCopybara-Service <copybara-worker@google.com>2023-06-06 12:54:03 -0700
commit515e920e2db38db565d5d45f9f8ad58155a7884a (patch)
tree207f48fbb0d98b078c771fe6c633cbffa1ecb0e8
parentb848e7776afdd0a789db9ca2e5dbe4af446e722e (diff)
downloadabrolhos-515e920e2db38db565d5d45f9f8ad58155a7884a.tar.gz
edgetpu: hold mmap_lock around pin_user_pages mmap_lock must be held around call to pin_user_pages to protect against concurrent address space modifications. Bug: 283787360 GitOrigin-RevId: 731853dde737965a8b4fa5eb2a37d581c1557832 Change-Id: I914b3388a378d16a46a358a5f391e230dc95e328
-rw-r--r--drivers/edgetpu/edgetpu-device-group.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/edgetpu/edgetpu-device-group.c b/drivers/edgetpu/edgetpu-device-group.c
index 9b85679..c410ebc 100644
--- a/drivers/edgetpu/edgetpu-device-group.c
+++ b/drivers/edgetpu/edgetpu-device-group.c
@@ -1258,8 +1258,18 @@ static struct page **edgetpu_pin_user_pages(struct edgetpu_device_group *group,
kvfree(pages);
return ERR_PTR(-ENOMEM);
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
+ down_read(&current->mm->mmap_sem);
+#else
+ mmap_read_lock(current->mm);
+#endif
ret = pin_user_pages(host_addr & PAGE_MASK, num_pages, foll_flags,
pages, vmas);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
+ up_read(&current->mm->mmap_sem);
+#else
+ mmap_read_unlock(current->mm);
+#endif
kvfree(vmas);
if (ret < 0) {
etdev_dbg(etdev, "pin_user_pages failed %u:%pK-%u: %d",