diff mbox

scsi: ibmvscsi: Improve strings handling

Message ID 1530040190-12694-1-git-send-email-leitao@debian.org (mailing list archive)
State Superseded
Headers show

Commit Message

Breno Leitao June 26, 2018, 7:09 p.m. UTC
Currently an open firmware property is copied into partition_name variable
without keeping a room for \0.

Later one, this variable (partition_name), which is 97 bytes long, is
strncpyed into ibmvcsci_host_data->madapter_info->partition_name, which
is 96 bytes long, possibly truncating it 'again' and removing the \0.

This patch simply decreases the partition name to 96 and just copy up to 95
bits from the openfirmware property into it, keeping room for \0. I think
there is no issue if this there is a truncation in this very first copy,
i.e, when the open firmware property is read and copied into the driver for
the very first time;

This causes the following warning on GCC 8:

	drivers/scsi/ibmvscsi/ibmvscsi.c:281:2: warning: ‘strncpy’ output may be truncated copying 96 bytes from a string of length 96 [-Wstringop-truncation]
	...
	inlined from ‘ibmvscsi_probe’ at drivers/scsi/ibmvscsi/ibmvscsi.c:2221:7:
	drivers/scsi/ibmvscsi/ibmvscsi.c:265:3: warning: ‘strncpy’ specified bound 97 equals destination size [-Wstringop-truncation]

CC: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Signed-off-by: Breno Leitao <leitao@debian.org>
---
 drivers/scsi/ibmvscsi/ibmvscsi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Bart Van Assche June 26, 2018, 8:04 p.m. UTC | #1
On 06/26/18 12:10, Breno Leitao wrote:
>   	if (ppartition_name)
>   		strncpy(partition_name, ppartition_name,
> -				sizeof(partition_name));
> +				sizeof(partition_name) - 1);

Please use strlcpy() instead of trying to emulate it.

Thanks,

Bart.
diff mbox

Patch

diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 17df76f0be3c..56107f74ac5e 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -93,7 +93,7 @@  static int max_requests = IBMVSCSI_MAX_REQUESTS_DEFAULT;
 static int max_events = IBMVSCSI_MAX_REQUESTS_DEFAULT + 2;
 static int fast_fail = 1;
 static int client_reserve = 1;
-static char partition_name[97] = "UNKNOWN";
+static char partition_name[96] = "UNKNOWN";
 static unsigned int partition_number = -1;
 static LIST_HEAD(ibmvscsi_head);
 
@@ -263,7 +263,7 @@  static void gather_partition_info(void)
 	ppartition_name = of_get_property(of_root, "ibm,partition-name", NULL);
 	if (ppartition_name)
 		strncpy(partition_name, ppartition_name,
-				sizeof(partition_name));
+				sizeof(partition_name) - 1);
 	p_number_ptr = of_get_property(of_root, "ibm,partition-no", NULL);
 	if (p_number_ptr)
 		partition_number = of_read_number(p_number_ptr, 1);