• Dan Carpenter's avatar
    IB/uverbs: Handle large number of entries in poll CQ · 7182afea
    Dan Carpenter authored
    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.
    
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarDan 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: default avatarRoland Dreier <rolandd@cisco.com>
    7182afea
uverbs_cmd.c 53.2 KB