]> xenbits.xensource.com Git - qemu-upstream-4.5-testing.git/commit
ide: Check array bounds before writing to io_buffer (CVE-2015-5154)
authorKevin Wolf <kwolf@redhat.com>
Mon, 27 Jul 2015 03:42:53 +0000 (23:42 -0400)
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>
Wed, 29 Jul 2015 15:32:35 +0000 (15:32 +0000)
commit38cdb298d664d0d4e40e0bc890d8f25ff25e8a86
tree47320531cf9d1928a84144c4e922fef310fb5a41
parenteb75549f69ca0f3eab26ed39d4ad0fcb6613f64a
ide: Check array bounds before writing to io_buffer (CVE-2015-5154)

If the end_transfer_func of a command is called because enough data has
been read or written for the current PIO transfer, and it fails to
correctly call the command completion functions, the DRQ bit in the
status register and s->end_transfer_func may remain set. This allows the
guest to access further bytes in s->io_buffer beyond s->data_end, and
eventually overflowing the io_buffer.

One case where this currently happens is emulation of the ATAPI command
START STOP UNIT.

This patch fixes the problem by adding explicit array bounds checks
before accessing the buffer instead of relying on end_transfer_func to
function correctly.

upstream-commit-id: d2ff85854512574e7209f295e87b0835d5b032c6

Cc: qemu-stable@nongnu.org
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
hw/ide/core.c