From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Aleksandr Miloserdov <a.miloserdov@yadro.com>,
Roman Bolshakov <r.bolshakov@yadro.com>,
Bodo Stroesser <bostroesser@gmail.com>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Sasha Levin <sashal@kernel.org>,
linux-scsi@vger.kernel.org, target-devel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
bcm-kernel-feedback-list@broadcom.com
Subject: [PATCH AUTOSEL 5.4 32/33] scsi: target: core: Add cmd length set before cmd complete
Date: Tue, 2 Mar 2021 06:57:48 -0500 [thread overview]
Message-ID: <20210302115749.62653-32-sashal@kernel.org> (raw)
In-Reply-To: <20210302115749.62653-1-sashal@kernel.org>
From: Aleksandr Miloserdov <a.miloserdov@yadro.com>
[ Upstream commit 1c73e0c5e54d5f7d77f422a10b03ebe61eaed5ad ]
TCM doesn't properly handle underflow case for service actions. One way to
prevent it is to always complete command with
target_complete_cmd_with_length(), however it requires access to data_sg,
which is not always available.
This change introduces target_set_cmd_data_length() function which allows
to set command data length before completing it.
Link: https://lore.kernel.org/r/20210209072202.41154-2-a.miloserdov@yadro.com
Reviewed-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Bodo Stroesser <bostroesser@gmail.com>
Signed-off-by: Aleksandr Miloserdov <a.miloserdov@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/target/target_core_transport.c | 15 +++++++++++----
include/target/target_core_backend.h | 1 +
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index b1f4be055f83..a16835c0bb1d 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -873,11 +873,9 @@ void target_complete_cmd(struct se_cmd *cmd, u8 scsi_status)
}
EXPORT_SYMBOL(target_complete_cmd);
-void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int length)
+void target_set_cmd_data_length(struct se_cmd *cmd, int length)
{
- if ((scsi_status == SAM_STAT_GOOD ||
- cmd->se_cmd_flags & SCF_TREAT_READ_AS_NORMAL) &&
- length < cmd->data_length) {
+ if (length < cmd->data_length) {
if (cmd->se_cmd_flags & SCF_UNDERFLOW_BIT) {
cmd->residual_count += cmd->data_length - length;
} else {
@@ -887,6 +885,15 @@ void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int len
cmd->data_length = length;
}
+}
+EXPORT_SYMBOL(target_set_cmd_data_length);
+
+void target_complete_cmd_with_length(struct se_cmd *cmd, u8 scsi_status, int length)
+{
+ if (scsi_status == SAM_STAT_GOOD ||
+ cmd->se_cmd_flags & SCF_TREAT_READ_AS_NORMAL) {
+ target_set_cmd_data_length(cmd, length);
+ }
target_complete_cmd(cmd, scsi_status);
}
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 51b6f50eabee..0deeff9b4496 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -69,6 +69,7 @@ int transport_backend_register(const struct target_backend_ops *);
void target_backend_unregister(const struct target_backend_ops *);
void target_complete_cmd(struct se_cmd *, u8);
+void target_set_cmd_data_length(struct se_cmd *, int);
void target_complete_cmd_with_length(struct se_cmd *, u8, int);
void transport_copy_sense_to_cmd(struct se_cmd *, unsigned char *);
--
2.30.1
next prev parent reply other threads:[~2021-03-03 0:36 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-02 11:57 [PATCH AUTOSEL 5.4 01/33] i2c: rcar: faster irq code to minimize HW race condition Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 02/33] i2c: rcar: optimize cacheline " Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 03/33] udf: fix silent AED tagLocation corruption Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 04/33] mmc: mxs-mmc: Fix a resource leak in an error handling path in 'mxs_mmc_probe()' Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 05/33] mmc: sdhci-of-dwcmshc: set SDHCI_QUIRK2_PRESET_VALUE_BROKEN Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 06/33] mmc: mediatek: fix race condition between msdc_request_timeout and irq Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 07/33] Platform: OLPC: Fix probe error handling Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 08/33] powerpc/pci: Add ppc_md.discover_phbs() Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 09/33] HID: i2c-hid: Add I2C_HID_QUIRK_NO_IRQ_AFTER_RESET for ITE8568 EC on Voyo Winpad A15 Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 10/33] spi: stm32: make spurious and overrun interrupts visible Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 11/33] powerpc: improve handling of unrecoverable system reset Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 12/33] powerpc/perf: Record counter overflow always if SAMPLE_IP is unset Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 13/33] HID: logitech-dj: add support for the new lightspeed connection iteration Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 14/33] powerpc/64: Fix stack trace not displaying final frame Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 15/33] iommu/amd: Fix performance counter initialization Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 16/33] sparc32: Limit memblock allocation to low memory Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 17/33] sparc64: Use arch_validate_flags() to validate ADI flag Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 18/33] ACPICA: Fix race in generic_serial_bus (I2C) and GPIO op_region parameter handling Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 19/33] Input: applespi - don't wait for responses to commands indefinitely Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 20/33] x86, build: use objtool mcount Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 21/33] PCI: xgene-msi: Fix race in installing chained irq handler Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 22/33] misc: eeprom_93xx46: Add quirk to support Microchip 93LC46B eeprom Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 23/33] PCI: mediatek: Add missing of_node_put() to fix reference leak Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 24/33] drm/msm/a5xx: Remove overwriting A5XX_PC_DBG_ECO_CNTL register Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 25/33] kbuild: clamp SUBLEVEL to 255 Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 26/33] PCI: Fix pci_register_io_range() memory leak Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 27/33] i40e: Fix memory leak in i40e_probe Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 28/33] s390/smp: __smp_rescan_cpus() - move cpumask away from stack Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 29/33] sysctl.c: fix underflow value setting risk in vm_table Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 30/33] scsi: libiscsi: Fix iscsi_prep_scsi_cmd_pdu() error handling Sasha Levin
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 31/33] nbd: handle device refs for DESTROY_ON_DISCONNECT properly Sasha Levin
2021-03-02 11:57 ` Sasha Levin [this message]
2021-03-02 11:57 ` [PATCH AUTOSEL 5.4 33/33] scsi: target: core: Prevent underflow for service actions Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210302115749.62653-32-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=a.miloserdov@yadro.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bostroesser@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=r.bolshakov@yadro.com \
--cc=stable@vger.kernel.org \
--cc=target-devel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).