|
|
@@ -587,6 +587,10 @@ int genwqe_user_vmap(struct genwqe_dev *cd, struct dma_mapping *m, void *uaddr,
|
|
|
/* determine space needed for page_list. */
|
|
|
data = (unsigned long)uaddr;
|
|
|
offs = offset_in_page(data);
|
|
|
+ if (size > ULONG_MAX - PAGE_SIZE - offs) {
|
|
|
+ m->size = 0; /* mark unused and not added */
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
m->nr_pages = DIV_ROUND_UP(offs + size, PAGE_SIZE);
|
|
|
|
|
|
m->page_list = kcalloc(m->nr_pages,
|