summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/rds/rdma.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/net/rds/rdma.c b/net/rds/rdma.c
index cf0dfa77fb7e..34819316f93a 100644
--- a/net/rds/rdma.c
+++ b/net/rds/rdma.c
@@ -498,6 +498,15 @@ static struct rds_rdma_op *rds_rdma_prepare(struct rds_sock *rs,
max_pages = max(nr, max_pages);
nr_pages += nr;
+
+ /*
+ * nr for one entry is limited to (UINT_MAX>>PAGE_SHIFT)+1,
+ * so nr_pages cannot overflow without first going negative.
+ */
+ if ((int)nr_pages < 0) {
+ ret = -EINVAL;
+ goto out;
+ }
}
pages = kcalloc(max_pages, sizeof(struct page *), GFP_KERNEL);