SPC-5 (4.2.5.6 Allocation length) requires to terminate transfers to the Data In Buffer when the number of bytes or blocks specified by the ALLOCATION LENGTH field have been transferred or when all available data have been transferred, whichever is less. PERSISTENT RESERVE IN service actions in TCM don't follow the clause and return ALLOCATION LENGTH of data, even if actual number of data in reply is less (e.g. there are no reservation keys). That causes an underflow and a failure in libiscsi PrinReadKeys.Simple that expects Data In Buffer size equal to ADDITIONAL LENGTH + 8. This patch series fixes this behavior. It is intended for 5.11/scsi-queue branch. Aleksandr Miloserdov (2): scsi: target: core: Add cmd length set before cmd complete scsi: target: core: Prevent underflow for service actions drivers/target/target_core_pr.c | 6 ++++++ drivers/target/target_core_transport.c | 15 +++++++++++---- include/target/target_core_backend.h | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) -- 2.26.2