drm/evdi: Fix possible OOB in evdi_gem_fault
BUG=b:287203840
TEST=Various boards including sarien and trogdor
Change-Id: I109172dba4d1143f3bb5bf0377f770022065e228
Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/4883469
Reviewed-by: Dominik Behr <dbehr@chromium.org>
diff --git a/drivers/gpu/drm/evdi/evdi_gem.c b/drivers/gpu/drm/evdi/evdi_gem.c
index f71e0d6..4322748 100644
--- a/drivers/gpu/drm/evdi/evdi_gem.c
+++ b/drivers/gpu/drm/evdi/evdi_gem.c
@@ -126,13 +126,14 @@
{
struct evdi_gem_object *obj = to_evdi_bo(vma->vm_private_data);
struct page *page;
- unsigned int page_offset;
+ pgoff_t page_offset;
+ loff_t num_pages = obj->base.size >> PAGE_SHIFT;
int ret = 0;
page_offset = ((unsigned long)vmf->virtual_address - vma->vm_start) >>
PAGE_SHIFT;
- if (!obj->pages)
+ if (!obj->pages || page_offset >= num_pages)
return VM_FAULT_SIGBUS;
page = obj->pages[page_offset];