virtio_console: Assure used length from device is limited
[ Upstream commit d00d8da586 ]
The buf->len might come from an untrusted device. This
ensures the value would not exceed the size of the buffer
to avoid data corruption or loss.
Signed-off-by: Xie Yongji <xieyongji@bytedance.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/20210525125622.1203-1-xieyongji@bytedance.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
09a94a89d7
commit
f6ec306b93
1 changed files with 2 additions and 2 deletions
|
|
@ -475,7 +475,7 @@ static struct port_buffer *get_inbuf(struct port *port)
|
|||
|
||||
buf = virtqueue_get_buf(port->in_vq, &len);
|
||||
if (buf) {
|
||||
buf->len = len;
|
||||
buf->len = min_t(size_t, len, buf->size);
|
||||
buf->offset = 0;
|
||||
port->stats.bytes_received += len;
|
||||
}
|
||||
|
|
@ -1712,7 +1712,7 @@ static void control_work_handler(struct work_struct *work)
|
|||
while ((buf = virtqueue_get_buf(vq, &len))) {
|
||||
spin_unlock(&portdev->c_ivq_lock);
|
||||
|
||||
buf->len = len;
|
||||
buf->len = min_t(size_t, len, buf->size);
|
||||
buf->offset = 0;
|
||||
|
||||
handle_control_message(vq->vdev, portdev, buf);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue