+29
−22
Loading
Currently, when nvmet_tcp_build_pdu_iovec() detects an out-of-bounds PDU length or offset, it triggers nvmet_tcp_fatal_error(cmd->queue) and returns early. However, because the function returns void, the callers are entirely unaware that a fatal error has occurred and that the cmd->recv_msg.msg_iter was left uninitialized. Callers such as nvmet_tcp_handle_h2c_data_pdu() proceed to blindly overwrite the queue state with queue->rcv_state = NVMET_TCP_RECV_DATA Consequently, the socket receiving loop may attempt to read incoming network data into the uninitialized iterator. Fix this by shifting the error handling responsibility to the callers. Fixes: 52a0a985 ("nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec") Reviewed-by:Hannes Reinecke <hare@suse.de> Reviewed-by:
Yunje Shin <ioerts@kookmin.ac.kr> Reviewed-by:
Chaitanya Kulkarni <kch@nvidia.com> Signed-off-by:
Maurizio Lombardi <mlombard@redhat.com> Signed-off-by:
Keith Busch <kbusch@kernel.org>