]> Git Repo - qemu.git/commit
scsi: Reject commands if the CDB length exceeds buf_len
authorJohn Millikin <[email protected]>
Wed, 17 Aug 2022 05:35:00 +0000 (14:35 +0900)
committerPaolo Bonzini <[email protected]>
Thu, 1 Sep 2022 05:42:37 +0000 (07:42 +0200)
commit6d1511cea0fb536f2df7b6c31bb745d80b98d82e
tree62d61f3c402d6cb4a0da47c7862eeeeab713f699
parentfe9d8927e265fd723a6dc87cd6d220f4677dbe1f
scsi: Reject commands if the CDB length exceeds buf_len

In scsi_req_parse_cdb(), if the CDB length implied by the command type
exceeds the initialized portion of the command buffer, reject the request.

Rejected requests are recorded by the `scsi_req_parse_bad` trace event.

On example of a bug detected by this check is SunOS's use of interleaved
DMA and non-DMA commands. This guest behavior currently causes QEMU to
parse uninitialized memory as a SCSI command, with unpredictable
outcomes.

With the new check in place:

  * QEMU consistently creates a trace event and rejects the request.

  * SunOS retries the request(s) and is able to successfully boot from
    disk.

Signed-off-by: John Millikin <[email protected]>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1127
Message-Id: <20220817053458[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
hw/scsi/scsi-bus.c
This page took 0.027139 seconds and 4 git commands to generate.