c2d5d21
From fcad7de1a8c3d140d1d0eb120727966017d3727b Mon Sep 17 00:00:00 2001
c2d5d21
From: Chris Leech <cleech@redhat.com>
c2d5d21
Date: Sat, 17 Aug 2013 15:50:45 -0700
c2d5d21
Subject: libiscsi: fix incorrect strncpy use
c2d5d21
c2d5d21
Changes to internal structures make the src and dst buffers of some
c2d5d21
copies (potentially) different sizes.  Fix strncpy calls that were using
c2d5d21
the size of the src argument as the limit.
c2d5d21
---
c2d5d21
 libiscsi/libiscsi.c | 19 ++++++++-----------
c2d5d21
 1 file changed, 8 insertions(+), 11 deletions(-)
c2d5d21
c2d5d21
diff --git a/libiscsi/libiscsi.c b/libiscsi/libiscsi.c
c2d5d21
index 6e6846a..064e4b5 100644
c2d5d21
--- a/libiscsi/libiscsi.c
c2d5d21
+++ b/libiscsi/libiscsi.c
c2d5d21
@@ -587,15 +587,13 @@ int libiscsi_get_firmware_network_config(
c2d5d21
 		return ENODEV;
c2d5d21
 
c2d5d21
 	config->dhcp = strlen(fw_entry.dhcp) ? 1 : 0;
c2d5d21
-	strncpy(config->iface_name, fw_entry.iface, sizeof fw_entry.iface);
c2d5d21
-	strncpy(config->mac_address, fw_entry.mac, sizeof fw_entry.mac);
c2d5d21
-	strncpy(config->ip_address, fw_entry.ipaddr, sizeof fw_entry.ipaddr);
c2d5d21
-	strncpy(config->netmask, fw_entry.mask, sizeof fw_entry.mask);
c2d5d21
-	strncpy(config->gateway, fw_entry.gateway, sizeof fw_entry.gateway);
c2d5d21
-	strncpy(config->primary_dns, fw_entry.primary_dns,
c2d5d21
-		sizeof fw_entry.primary_dns);
c2d5d21
-	strncpy(config->secondary_dns, fw_entry.secondary_dns,
c2d5d21
-		sizeof fw_entry.secondary_dns);
c2d5d21
+	strlcpy(config->iface_name, fw_entry.iface, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->mac_address, fw_entry.mac, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->ip_address, fw_entry.ipaddr, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->netmask, fw_entry.mask, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->gateway, fw_entry.gateway, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->primary_dns, fw_entry.primary_dns, LIBISCSI_VALUE_MAXLEN);
c2d5d21
+	strlcpy(config->secondary_dns, fw_entry.secondary_dns, LIBISCSI_VALUE_MAXLEN);
c2d5d21
 	return 0;
c2d5d21
 }
c2d5d21
 
c2d5d21
@@ -613,8 +611,7 @@ int libiscsi_get_firmware_initiator_name(char *initiatorname)
c2d5d21
 	if (fw_get_entry(&fw_entry))
c2d5d21
 		return ENODEV;
c2d5d21
 
c2d5d21
-	strncpy(initiatorname, fw_entry.initiatorname,
c2d5d21
-		sizeof fw_entry.initiatorname);
c2d5d21
+	strlcpy(initiatorname, fw_entry.initiatorname, LIBISCSI_VALUE_MAXLEN);
c2d5d21
 
c2d5d21
 	return 0;
c2d5d21
 }
c2d5d21
-- 
c2d5d21
1.8.1.4
c2d5d21