diff options
-rw-r--r-- | net/rds/rdma.c | 9 |
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); |