nvmet-tcp: fix out-of-bounds access when receiving multiple h2cdata PDUs
authorSagi Grimberg <sagi@grimberg.me>
Wed, 3 Feb 2021 09:20:25 +0000 (01:20 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Feb 2021 08:25:28 +0000 (09:25 +0100)
commit7e6dcaeadc0ea240721a53a83bd45fc36e3eee3c
tree287b7aa2238da0deeb7327765b4b4d24a6f2a8bc
parentf1c87b4b2c7bf50c644c215f078a57d39e1165c7
nvmet-tcp: fix out-of-bounds access when receiving multiple h2cdata PDUs

[ Upstream commit cb8563f5c735a042ea2dd7df1ad55ae06d63ffeb ]

When the host sends multiple h2cdata PDUs, we keep track on
the receive progress and calculate the scatterlist index and
offsets.

The issue is that sg_offset should only be kept for the first
iov entry we map in the iovec as this is the difference between
our cursor and the sg entry offset itself.

In addition, the sg index was calculated wrong because we should
not round up when dividing the command byte offset with PAG_SIZE.

Fixes: 872d26a391da ("nvmet-tcp: add NVMe over TCP target driver")
Reported-by: Narayan Ayalasomayajula <Narayan.Ayalasomayajula@wdc.com>
Tested-by: Narayan Ayalasomayajula <Narayan.Ayalasomayajula@wdc.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/nvme/target/tcp.c