hw/scsi/lsi53c895a: Do not abort when DMA requested and no data queued scsi/lsi53c895a: fix use-after-free in lsi_do_msgout (CVE-2022-0216) scsi/lsi53c895a: really fix use-after-free in lsi_do_msgout (CVE-2022-0216) Signed-off-by: yezengruan <yezengruan@huawei.com> Signed-off-by: bobychen <boby.chen@huawei.com>
48 lines
1.7 KiB
Diff
48 lines
1.7 KiB
Diff
From 13136d9656dd738b6e555cad696e4a058f8f0a2b Mon Sep 17 00:00:00 2001
|
|
From: Mauro Matteo Cascella <mcascell@redhat.com>
|
|
Date: Mon, 11 Jul 2022 14:33:16 +0200
|
|
Subject: [PATCH 3/3] scsi/lsi53c895a: really fix use-after-free in
|
|
lsi_do_msgout (CVE-2022-0216)
|
|
|
|
Set current_req to NULL, not current_req->req, to prevent reusing a free'd
|
|
buffer in case of repeated SCSI cancel requests. Also apply the fix to
|
|
CLEAR QUEUE and BUS DEVICE RESET messages as well, since they also cancel
|
|
the request.
|
|
|
|
Thanks to Alexander Bulekov for providing a reproducer.
|
|
|
|
Fixes: CVE-2022-0216
|
|
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/972
|
|
Signed-off-by: Mauro Matteo Cascella <mcascell@redhat.com>
|
|
Tested-by: Alexander Bulekov <alxndr@bu.edu>
|
|
Message-Id: <20220711123316.421279-1-mcascell@redhat.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
---
|
|
hw/scsi/lsi53c895a.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
|
|
index 16c4726dcc..88bccf2b4c 100644
|
|
--- a/hw/scsi/lsi53c895a.c
|
|
+++ b/hw/scsi/lsi53c895a.c
|
|
@@ -1029,7 +1029,7 @@ static void lsi_do_msgout(LSIState *s)
|
|
trace_lsi_do_msgout_abort(current_tag);
|
|
if (current_req && current_req->req) {
|
|
scsi_req_cancel(current_req->req);
|
|
- current_req->req = NULL;
|
|
+ current_req = NULL;
|
|
}
|
|
lsi_disconnect(s);
|
|
break;
|
|
@@ -1055,6 +1055,7 @@ static void lsi_do_msgout(LSIState *s)
|
|
/* clear the current I/O process */
|
|
if (s->current) {
|
|
scsi_req_cancel(s->current->req);
|
|
+ current_req = NULL;
|
|
}
|
|
|
|
/* As the current implemented devices scsi_disk and scsi_generic
|
|
--
|
|
2.27.0
|
|
|