]> git.karo-electronics.de Git - karo-tx-linux.git/commit
IB/uverbs: Handle large number of entries in poll CQ
authorDan Carpenter <error27@gmail.com>
Wed, 13 Oct 2010 09:13:12 +0000 (09:13 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 7 Jan 2011 21:58:19 +0000 (13:58 -0800)
commitee9b8be2eb2f7bd2b56b0ed14c7652e5e14a2d9b
tree1d6edfa65908dd87c2eea82b2aae592a19217579
parent607cad435110a59b033077aeca9ddaa0931f5b32
IB/uverbs: Handle large number of entries in poll CQ

commit 7182afea8d1afd432a17c18162cc3fd441d0da93 upstream.

In ib_uverbs_poll_cq() code there is a potential integer overflow if
userspace passes in a large cmd.ne.  The calls to kmalloc() would
allocate smaller buffers than intended, leading to memory corruption.
There iss also an information leak if resp wasn't all used.
Unprivileged userspace may call this function, although only if an
RDMA device that uses this function is present.

Fix this by copying CQ entries one at a time, which avoids the
allocation entirely, and also by moving this copying into a function
that makes sure to initialize all memory copied to userspace.

Special thanks to Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
for his help and advice.

Signed-off-by: Dan Carpenter <error27@gmail.com>
[ Monkey around with things a bit to avoid bad code generation by gcc
  when designated initializers are used.  - Roland ]

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/infiniband/core/uverbs_cmd.c