From 53728117bc0cd7d20c5d2e88e4d6a60c85d6fa8a Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 4 Nov 2024 15:07:56 -0500 Subject: [PATCH] SCSI: Reset flags on the correct request in submit_autosense. The passed request is the one triggering the auto-sense, not the auto-sense itself. Resetting the "buffered" flag on the wrong request meant that if a buffer had been used for the triggering request, it would be leaked, and subsequently we would get KDLs when trying to unlock memory that wasn't actually locked at all. Fixes #19218 and related tickets. --- src/add-ons/kernel/bus_managers/scsi/scsi_io.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/scsi/scsi_io.cpp b/src/add-ons/kernel/bus_managers/scsi/scsi_io.cpp index 38813ddf3e..4812c36f3c 100644 --- a/src/add-ons/kernel/bus_managers/scsi/scsi_io.cpp +++ b/src/add-ons/kernel/bus_managers/scsi/scsi_io.cpp @@ -152,9 +152,12 @@ submit_autosense(scsi_ccb *request) // no DMA buffer (we made sure that the data buffer fulfills all // limitations) - request->buffered = false; + device->auto_sense_request->buffered = false; // don't let any request bypass us - request->ordered = true; + device->auto_sense_request->ordered = true; + // request is not emulated + device->auto_sense_request->emulated = false; + // initial SIM state for this request request->sim_state = 0;