From: Prasad J Pandit Date: Fri, 5 Feb 2016 13:58:20 +0000 (+0000) Subject: ide: ahci: reset ncq object to unused on error X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=cf39008ae613cea09b4dc2c0da3e1c68373936f5;p=qemu-upstream-4.4-testing.git ide: ahci: reset ncq object to unused on error When processing NCQ commands, AHCI device emulation prepares a NCQ transfer object; To which an aio control block(aiocb) object is assigned in 'execute_ncq_command'. In case, when the NCQ command is invalid, the 'aiocb' object is not assigned, and NCQ transfer object is left as 'used'. This leads to a use after free kind of error in 'bdrv_aio_cancel_async' via 'ahci_reset_port'. Reset NCQ transfer object to 'unused' to avoid it. [Maintainer edit: s/ACHI/AHCI/ in the commit message. --js] Reported-by: Qinghao Tang Signed-off-by: Prasad J Pandit Reviewed-by: John Snow Message-id: 1452282511-4116-1-git-send-email-ppandit@redhat.com Signed-off-by: John Snow Signed-off-by: Stefano Stabellini --- diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c index 7c62cc7f1..c535280c1 100644 --- a/hw/ide/ahci.c +++ b/hw/ide/ahci.c @@ -725,6 +725,7 @@ static void ncq_cb(void *opaque, int ret) ide_state->error = ABRT_ERR; ide_state->status = READY_STAT | ERR_STAT; ncq_tfs->drive->port_regs.scr_err |= (1 << ncq_tfs->tag); + ncq_tfs->used = 0; } else { ide_state->status = READY_STAT | SEEK_STAT; }