mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
io_uring/zcrx: fix overshooting recv limit
commit09cfd3c52eupstream. It's reported that sometimes a zcrx request can receive more than was requested. It's caused by io_zcrx_recv_skb() adjusting desc->count for all received buffers including frag lists, but then doing recursive calls to process frag list skbs, which leads to desc->count double accounting and underflow. Reported-and-tested-by: Matthias Jasny <matthiasjasny@gmail.com> Fixes:6699ec9a23("io_uring/zcrx: add a read limit to recvzc requests") Cc: stable@vger.kernel.org Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3e2205db2f
commit
8bcc9eaf1b
|
|
@ -1154,12 +1154,16 @@ io_zcrx_recv_skb(read_descriptor_t *desc, struct sk_buff *skb,
|
|||
|
||||
end = start + frag_iter->len;
|
||||
if (offset < end) {
|
||||
size_t count;
|
||||
|
||||
copy = end - offset;
|
||||
if (copy > len)
|
||||
copy = len;
|
||||
|
||||
off = offset - start;
|
||||
count = desc->count;
|
||||
ret = io_zcrx_recv_skb(desc, frag_iter, off, copy);
|
||||
desc->count = count;
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user